ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

Σχετικά έγγραφα
Αλγόριθμοι Γραφημάτων

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

Δομές Δεδομένων Ενότητα 6

Αλγόριθμοι Γραφημάτων

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

Αναζήτηση Κατά Βάθος. ιδάσκοντες: Σ. Ζάχος,. Φωτάκης Επιμέλεια διαφανειών:. Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Εισαγωγή στους Αλγορίθμους Φροντιστήριο 4

Αναζήτηση Κατά Πλάτος

Εισαγωγή στους Αλγορίθμους Ενότητα 7η

(elementary graph algorithms)

Αλγόριθμοι Γραφημάτων

Αλγόριθμοι Γραφημάτων

Σχεδίαση και Ανάλυση Αλγορίθμων

Σχεδίαση Αλγορίθμων - Τμήμα Πληροφορικής ΑΠΘ -4ο εξάμηνο 1

Εισαγωγή στους Αλγορίθμους Φροντιστήριο 8

Αναζήτηση Κατά Βάθος. Επιμέλεια διαφανειών: Δ. Φωτάκης Συμπληρώσεις: Α. Παγουρτζής. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Αναζήτηση Κατά Βάθος. ιδάσκοντες: Σ. Ζάχος,. Φωτάκης Επιμέλεια διαφανειών:. Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης

Εισαγωγή στους Αλγορίθμους

Εισαγωγή στους Αλγορίθμους

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

Εισαγωγή στους Αλγορίθμους Φροντιστήριο 7

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Γραφήματα. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Αναζήτηση Κατά Βάθος. Επιµέλεια διαφανειών:. Φωτάκης διαφάνειες για SCC: A. Παγουρτζής. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

ΣΥΝΔΥΑΣΤΙΚΗ ΒΕΛΤΙΣΤΟΠΟΙΗΣΗ

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

Σχεδίαση & Ανάλυση Αλγορίθμων

Ενότητα 10 Γράφοι (ή Γραφήµατα)

Εισαγωγή στους Αλγορίθμους Φροντιστήριο 5

ΑΛΓΟΡΙΘΜΟΙ Άνοιξη I. ΜΗΛΗΣ

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΦΡΟΝΤΙΣΤΗΡΙΟ ΑΛΓΟΡΙΘΜΩΝ ΒΟΗΘΟΣ: ΒΑΓΓΕΛΗΣ ΔΟΥΡΟΣ

auth Αλγόριθμοι - Τμήμα Πληροφορικής ΑΠΘ -4ο εξάμηνο 1

Διάλεξη 21: Γράφοι II - Τοπολογική Ταξινόμηση

Εισαγωγή στους Αλγορίθμους Φροντιστήριο 3

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Συστήματα Αυτομάτου Ελέγχου. Ενότητα Α: Γραμμικά Συστήματα

Πληροφοριακά Συστήματα Διοίκησης (ΜΒΑ) Ενότητα 2: Εφαρμογές Δικτυωτής Ανάλυσης (1 ο Μέρος)

ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου,

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

(elementary graph algorithms)

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

ΕΠΛ 231 Δοµές Δεδοµένων και Αλγόριθµοι 11-1

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

Τίτλος Μαθήματος: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

Συντομότερες ιαδρομές

1 Διάσχιση κατευθυνόμενων γραφημάτων

Εισαγωγή στους Αλγορίθμους Φροντιστήριο 10

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές δεδομένων. Ενότητα 10η: Γράφοι Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών

Αλγόριθμοι και πολυπλοκότητα Οριζόντια διερεύνηση

Πληροφοριακά Συστήματα & Περιβάλλον Ασκήσεις

Αναζήτηση Κατά Πλάτος

Δομημένος Προγραμματισμός

Συντομότερες ιαδρομές

Γέφυρες σε Δίκτυα. Μας δίνεται ένα δίκτυο (κατευθυνόμενο γράφημα) αφετηριακός κόμβος. Γέφυρα του (με αφετηρία τον ) :

ΓΡΑΜΜΙΚΟΣ & ΔΙΚΤΥΑΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Εισαγωγή στους Αλγορίθμους Ενότητα 9η Άσκηση - Αλγόριθμος Kruskal

ΑΛΓΟΡΙΘΜΟΙ. Ενότητα 9: Άπληστοι Αλγόριθμοι. Ιωάννης Μανωλόπουλος, Καθηγητής Αναστάσιος Γούναρης, Επίκουρος Καθηγητής Τμήμα Πληροφορικής ΑΠΘ

ΒΟΗΘΗΤΙΚΕΣ ΣΗΜΕΙΩΣΕΙΣ

Μοντελοποίηση Λογικών Κυκλωμάτων

Αλγόριθµοι και Πολυπλοκότητα

Σχεδίαση και Ανάλυση Αλγορίθμων Ενότητα 3: ΑΝΑΠΑΡΑΣΤΑΣΗ ΔΕΔΟΜΕΝΩΝ - ΓΡΑΦΗΜΑΤΑ

Συντομότερα Μονοπάτια για Όλα τα Ζεύγη Κορυφών

Αναζήτηση Κατά Πλάτος

6η Διάλεξη Διάσχιση Γράφων και Δέντρων

Άσκηση 3 (ανακοινώθηκε στις 24 Απριλίου 2017, προθεσμία παράδοσης: 2 Ιουνίου 2017, 12 τα μεσάνυχτα).

Μέγιστη ροή. Κατευθυνόμενο γράφημα. Συνάρτηση χωρητικότητας. αφετηρίακός κόμβος. τερματικός κόμβος. Ροή δικτύου. με τις ακόλουθες ιδιότητες

Θεωρία Πιθανοτήτων & Στατιστική

Εισαγωγή στους Αλγορίθμους Ενότητα 9η Άσκηση - Αλγόριθμος Prim

ΓΡΑΜΜΙΚΟΣ & ΔΙΚΤΥΑΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Σχεδίαση και Ανάλυση Αλγορίθμων Ενότητα 4: ΑΝΑΠΑΡΑΣΤΑΣΗ ΔΕΔΟΜΕΝΩΝ - ΔΕΝΤΡΑ

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Πληροφορική. Εργαστηριακή Ενότητα 8 η : Γραφήματα

ΓΡΑΜΜΙΚΟΣ & ΔΙΚΤΥΑΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Αλγόριθμοι και Δομές Δεδομένων (IΙ) (γράφοι και δένδρα)

Αλγόριθμοι και πολυπλοκότητα Περιήγηση Πανεπιστημίων

Αλγόριθµοι και Πολυπλοκότητα

Εισαγωγή στους Αλγορίθμους

Διαδικαστικός Προγραμματισμός

ΣΤΑΤΙΣΤΙΚΗ ΕΠΙΧΕΙΡΗΣΕΩΝ

Λογιστικές Εφαρμογές Εργαστήριο

4 η Διάλεξη. Ενδεικτικές λύσεις ασκήσεων

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης

ΑΛΓΟΡΙΘΜΟΙ. Ενότητα 5: Μείωσε και Βασίλευε. Ιωάννης Μανωλόπουλος, Καθηγητής Αναστάσιος Γούναρης, Επίκουρος Καθηγητής Τμήμα Πληροφορικής ΑΠΘ

ΓΡΑΜΜΙΚΟΣ & ΔΙΚΤΥΑΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Αλγόριθµοι και Πολυπλοκότητα

Αναζήτηση Κατά Πλάτος

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύ

Διαχείριση Χρόνου & Δίκτυα στη Διοίκηση Έργων. Κηρυττόπουλος Κωνσταντίνος Επ. Καθηγητής ΕΜΠ

ΣΤΑΤΙΣΤΙΚΗ ΑΝΑΛΥΣΗ ΜΕ ΧΡΗΣΗ Η/Υ

Πληροφοριακά Συστήματα Διοίκησης (ΜΒΑ) Ενότητα 1: Δικτυωτή Ανάλυση (Θεωρία Γράφων)

Κατ οίκον Εργασία 5 Σκελετοί Λύσεων

Πρόβλημα συντομότερης διαδρομής - Shortest path problem. Κηρυττόπουλος Κωνσταντίνος Επ. Καθηγητής ΕΜΠ

Ελάχιστο Συνδετικό έντρο

ΓΡΑΜΜΙΚΟΣ & ΔΙΚΤΥΑΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Διδάσκων: Παναγιώτης Ανδρέου

Αλγόριθµοι Γραφηµάτων

ΓΡΑΜΜΙΚΟΣ & ΔΙΚΤΥΑΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Πληροφορική. Εργαστηριακή Ενότητα 1 η : Εισαγωγή στα Λογιστικά Φύλλα με το MS Excel. Ι. Ψαρομήλιγκος Τμήμα Λογιστικής & Χρηματοοικονομικής

Transcript:

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ Ενότητα 10γ: Αλγόριθμοι Γραφημάτων- Διερεύνηση Πρώτα σε Βάθος (DFS)- Τοπολογική Ταξινόμηση Μαρία Σατρατζέμη Τμήμα Εφαρμοσμένης Πληροφορικής

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς. ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ Μαρία Σατρατζέμη 2

Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο Μακεδονίας» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ Μαρία Σατρατζέμη 3

Depth-First Search Πρώτα σε Βάθος διερεύνηση (Depth-First Search) είναι μια άλλη στρατηγική για να εξερευνήσουμε ένα γράφημα Εξερευνούμε βαθύτερα στο γράφημα οποτεδήποτε αυτό είναι δυνατόν Οι ακμές εξερευνώνται με αφετηρία από την πιο πρόσφατα εντοπισμένη κορυφή v από την οποία εκκινούν μη εξερευνημένες ακμές Αφού εξερευνηθούν όλες οι ακμές της v, η διερεύνηση «επιστρέφει» στην κορυφή από την οποία εντοπίστηκε η v 4

Depth-First Search Η κορυφή χρωματίζεται λευκή Στη συνέχεια χρωματίζεται γκρι όταν εντοπίζεται Στη συνέχεια μαύρη όταν περατώνεται (όταν ολοκληρώνεται η εξέταση της λίστας γειτνίασης της) 5

Αλγόριθμος Depth-First Search DFS(G) 1. for each vertex u G->V 2. color[u] = WHITE; 3. p[u] = null 4. time = 0; 5. for each vertex u G->V 6. if (color[u] == WHITE) 7. DFS_Visit(u); DFS_Visit(u) 1. color[u] = GREY; 2. time = time+1; 3. d[u] = time; 4. for each v Adj[u] 5. if (color[v] == WHITE) 6. p[v] = u; 7. DFS_Visit(v); 8. color[u] = BLACK; 9. time = time+1; 10. f[u] = time; 6

Αλγόριθμος Depth-First Search DFS(G) 1. for each vertex u G->V 2. color[u] = WHITE; 3. p[u] = null 4. time = 0; 5. for each vertex u G->V 6. if (color[u] == WHITE) 7. DFS_Visit(u); Η μεταβλητή d[u] καταγράφει τη χρονική στιγμή που εντοπίζεται για πρώτη φορά η κορυφή u (και χρωματίζεται γκρι) DFS_Visit(u) 1. color[u] = GREY; 2. time = time+1; 3. d[u] = time; 4. for each v Adj[u] 5. if (color[v] == WHITE) 6. p[v] = u; 7. DFS_Visit(v); 8. color[u] = BLACK; 9. time = time+1; 10. f[u] = time; 7

Αλγόριθμος Depth-First Search DFS(G) 1. for each vertex u G->V 2. color[u] = WHITE; 3. p[u] = null 4. time = 0; 5. for each vertex u G->V 6. if (color[u] == WHITE) 7. DFS_Visit(u); Η μεταβλητή f[u] καταγράφει τη χρονική στιγμή που ολοκληρώνεται η εξέταση της λίστας γειτνίασης της u (και χρωματίζεται μαύρη) DFS_Visit(u) 1. color[u] = GREY; 2. time = time+1; 3. d[u] = time; 4. for each v Adj[u] 5. if (color[v] == WHITE) 6. p[v] = u; 7. DFS_Visit(v); 8. color[u] = BLACK; 9. time = time+1; 10. f[u] = time; 8

Αλγόριθμος Depth-First Search DFS(G) 1. for each vertex u G->V 2. color[u] = WHITE; 3. p[u] = null 4. time = 0; 5. for each vertex u G->V 6. if (color[u] == WHITE) 7. DFS_Visit(u); Θα χρωματιστούν όλες οι κορυφές μαύρες? DFS_Visit(u) 1. color[u] = GREY; 2. time = time+1; 3. d[u] = time; 4. for each v Adj[u] 5. if (color[v] == WHITE) 6. p[v] = u; 7. DFS_Visit(v); 8. color[u] = BLACK; 9. time = time+1; 10. f[u] = time; 9

DFS Example source vertex 10

DFS Example source vertex d f 1 11

DFS Example source vertex d f 1 2 12

DFS Example source vertex d f 1 2 3 13

DFS Example source vertex d f 1 2 3 4 14

DFS Example source vertex d f 1 2 3 4 5 15

DFS Example source vertex d f 1 2 3 4 5 6 16

DFS Example source vertex d f 1 8 2 7 3 4 5 6 17

DFS Example source vertex d f 1 8 2 7 3 4 5 6 18

DFS Example source vertex d f 1 8 2 7 9 3 4 5 6 Τι εκφράζουν οι γκρι κορυφές? 19

DFS Example source vertex d f 1 8 2 7 9 10 3 4 5 6 20

DFS Example source vertex d f 1 8 11 2 7 9 10 3 4 5 6 21

DFS Example source vertex d f 1 12 8 11 2 7 9 10 3 4 5 6 22

DFS Example source vertex d f 1 12 8 11 13 2 7 9 10 3 4 5 6 23

DFS Example source vertex d f 1 12 8 11 13 2 7 9 10 3 4 5 6 14 24

DFS Example source vertex d f 1 12 8 11 13 2 7 9 10 3 4 5 6 14 15 25

DFS Example source vertex d f 1 12 8 11 13 16 2 7 9 10 3 4 5 6 14 15 26

DFS : Ανάλυση DFS(G) 1. for each vertex u G->V 2. color[u] = WHITE; 3. p[u] = null 4. time = 0; 5. for each vertex u G->V 6. if (color[u] == WHITE) 7. DFS_Visit(u); DFS_Visit(u) 1. color[u] = GREY; 2. time = time+1; 3. d[u] = time; 4. for each v Adj[u] 5. if (color[v] == WHITE) 6. p[v] = u; 7. DFS_Visit(v); 8. color[u] = BLACK; 9. time = time+1; 10. f[u] = time; Ποιος θα είναι ο χρόνος εκτέλεσης? 27

DFS : Ανάλυση DFS(G) 1. for each vertex u G->V 2. color[u] = WHITE; 3. p[u] = null 4. time = 0; 5. for each vertex u G->V 6. if (color[u] == WHITE) 7. DFS_Visit(u); χρόνος εκτέλεσης: O(V 2 ) διότι η κλήσης της DFS_Visit για κάθε κορυφή, και η επανάληψη επί των Adj[] εκτελείται V φορές DFS_Visit(u) 1. color[u] = GREY; 2. time = time+1; 3. d[u] = time; 4. for each v Adj[u] 5. if (color[v] == WHITE) 6. p[v] = u; 7. DFS_Visit(v); 8. color[u] = BLACK; 9. time = time+1; 10. f[u] = time; 28

DFS : Ανάλυση DFS(G) 1. for each vertex u G->V 2. color[u] = WHITE; 3. p[u] = null 4. time = 0; 5. for each vertex u G->V 6. if (color[u] == WHITE) 7. DFS_Visit(u); Αλλά υπάρχει ένα αυστηρότερο φράγμα. Πόσες φορές θα κληθεί η DFS_Visit()? DFS_Visit(u) 1. color[u] = GREY; 2. time = time+1; 3. d[u] = time; 4. for each v Adj[u] 5. if (color[v] == WHITE) 6. p[v] = u; 7. DFS_Visit(v); 8. color[u] = BLACK; 9. time = time+1; 10. f[u] = time; 29

DFS : Ανάλυση Στην DFS(G) οι βρόχοι στις γραμμές 1-3 και στις γραμμές 5-7 απαιτούν χρόνο Θ(V) πέραν του χρόνου εκτέλεσης των κλήσεων της DFS_Visit. Η διαδικασία της DFS_Visit καλείται ακριβώς μια φορά για κάθε κορυφή v V, δεδομένου ότι εκτελείται μόνο για λευκές κορυφές και το πρώτο πράγμα που κάνει είναι να χρωματίσει την κορυφή εισόδου σε γκρι. Κατά τη διάρκεια μιας μεμονωμένης εκτέλεσης της DFS_Visit(v), ο βρόχος στις γραμμές 4-7 εκτελείται Adj[v] φορές. Δεδομένου ότι ισχύει: Adj v E το συνολικό κόστος εκτέλεσης των v V γραμμών 4-7 της DFS_Visit είναι Θ(Ε). Επομένως, ο χρόνος εκτέλεσης της DFS είναι Θ(V + Ε). 30

DFS: Είδη ακμών DFS εισάγει μια σημαντική διάκριση μεταξύ των ακμών του γραφήματος : δενδρικές ακμές (Tree edge): συναντά μια (νέα) λευκή κορυφή Οι δενδρικές ακμές ανήκουν στο καθοδικό δάσος G Η ακμή (u, v) είναι δενδρική αν η v εντοπίζεται κατά την εξερεύνηση της (u, v). Είναι δυνατόν οι δενδρικές ακμές να σχηματίζουν κύκλους? Ναι ή όχι και γιατί? 31

DFS Example source vertex d f 1 12 8 11 13 16 2 7 9 10 3 4 5 6 14 15 Δενδρικές ακμές (Tree edges) 32

DFS: Είδη ακμών DFS εισάγει μια σημαντική διάκριση μεταξύ των ακμών του αρχικού γραφήματος : Δενδρικές ακμές (Tree edge): όταν συναντά μια νέα (λευκή) κορυφή Ανιούσες ακμές (Back edge): από απόγονο σε πρόγονο Συναντά μια γκρι κορυφή (γκρι σε γκρι) 33

DFS Example source vertex d f 1 12 8 11 13 16 2 7 9 10 3 4 5 6 14 15 Δενδρικές ακμές (Tree edges) Ανιούσες ακμές (Back edges) 34

DFS: Είδη ακμών DFS εισάγει μια σημαντική διάκριση μεταξύ των ακμών του αρχικού γραφήματος : Δενδρικές ακμές (Tree edge): όταν συναντά μια νέα (λευκή) κορυφή Ανιούσες ακμές (Back edge): από απόγονο σε πρόγονο Κατιούσες ακμές (Forward edge): από πρόγονο σε from απόγονο Όχι ακμή δένδρου Από γκρι κορυφή σε μαύρη 35

DFS Example source vertex d f 1 12 8 11 13 16 2 7 9 10 3 4 5 6 14 15 Δενδρικές ακμές (Tree edges) Ανιούσες ακμές (Back edges) Κατιούσες ακμές Forward edges 36

DFS: Είδη ακμών DFS εισάγει μια σημαντική διάκριση μεταξύ των ακμών του αρχικού γραφήματος : Δενδρικές ακμές (Tree edge): όταν συναντά μια νέα (λευκή) κορυφή Ανιούσες ακμές (Back edge): από απόγονο σε πρόγονο Κατιούσες ακμές (Forward edge): από πρόγονο σε απόγονο Εγκάρσιες ακμές (Cross edge) : συνδέουν κορυφές στο ίδιο καθοδικό δένδρο εφόσον οι κορυφές δεν συνδέονται με σχέση προγόνου-απογόνου ή διαφορετικά καθοδικά δένδρα Από γκρι σε μαύρη ακμή 37

DFS Example source vertex d f 1 12 8 11 13 16 2 7 9 10 3 4 5 6 14 15 Δενδρικές ακμές (Tree edges) Ανιούσες ακμές (Back edges) Κατιούσες ακμές Forward edges Εγκάρσιες ακμές Cross edges 38

DFS: Είδη ακμών DFS εισάγει μια σημαντική διάκριση μεταξύ των ακμών του αρχικού γραφήματος : Δενδρικές ακμές (Tree edge): όταν συναντά μια νέα (λευκή) κορυφή Ανιούσες ακμές (Back edge): από απόγονο σε πρόγονο Κατιούσες ακμές (Forward edge): από πρόγονο σε απόγονο Εγκάρσιες ακμές (Cross edge) : μεταξύ δένδρου ή υποδένδρων Σημείωση: δενδρικές & ανιούσες ακμές είναι σημαντικές; Οι περισσότεροι αλγόριθμοι δεν διακρίνουν τις κατιούσες και εγκάρσιες ακμές 39

DFS: Είδη ακμών Αν το G είναι μη προσανατολισμένο, ο DFS παράγει μόνο δενδρικές και ανιούσες ακμές F source 40

DFS: Είδη ακμών Θεώρημα : Σε μια σε βάθος διερεύνηση ενός μη προσανατολισμένου γραφήματος G, κάθε ακμή του G είναι είτε δενδρική είτε ανιούσα Απόδειξη: Εστω (u, v) μια τυχούσα ακμή του G, και ας υποθέσουμε ότι d[u] < d[v]. Σ αυτή την περίπτωση η v θα πρέπει να εντοπίζεται και να περατώνεται πριν να περατωθεί η u (ενόσω η u είναι γκρι), αφού ανήκει στη λίστα γειτνίασης τη u. Αν η ακμή (u, v) εξερευνάται πρώτα κατά τη κατεύθυνση από την u προς την v, τότε μέχρι εκείνη τη χρονική στιγμή η v είναι μη εντοπισμένη (λευκή) διότι διαφορετικά η συγκεκριμένη ακμή θα είχε ήδη εξερευνηθεί κατά την κατεύθυνση από την v προς την u. Επομένως η ακμή καθίσταται δενδρική. Αν η ακμή (u, v) εξερευνάται πρώτα κατά τη κατεύθυνση από την v προς την u, τότε είναι ανιούσα, δεδομένου ότι η u είναι ακόμη γκρι τη στιγμή που ακμή εξερευνάται για πρώτη φορά. 41

DFS και Κύκλοι Γραφήματος Θεώρημα: Ένα προσανατολισμένο γράφημα είναι άκυκλο (acyclic) αν και μόνο αν η DFS διερεύνηση του G δε δημιουργεί ανιούσες ακμές Αν είναι άκυκλο, δε υπάρχουν ανιούσες ακμές (ανιούσα ακμή συνεπάγεται κύκλο) Αν δεν υπάρχουν ανιούσες ακμές τότε είναι άκυκλο Όχι ανιούσες ακμές συνεπάγεται μόνο δενδρικές ακμές Μόνο δενδρικές ακμές συνεπάγεται ότι έχουμε δένδρο ή δάσος το οποίο είναι εξ ορισμού άκυκλο Άρα εφαρμόζοντας DFS διερεύνηση προσδιορίζουμε αν ένα γράφημα έχει κύκλο 42

DFS και Κύκλοι Γραφήματος DFS(G) 1. for each vertex u G->V 2. color[u] = WHITE; 3. p[u] = null 4. time = 0; 5. for each vertex u G->V 6. if (color[u] == WHITE) 7. DFS_Visit(u); Πως μπορεί να τροποποιηθεί ο παραπάνω αλγόριθμος ώστε να προσδιορίζει κύκλο? DFS_Visit(u) 1. color[u] = GREY; 2. time = time+1; 3. d[u] = time; 4. for each v Adj[u] 5. if (color[v] == WHITE) 6. p[v] = u; 7. DFS_Visit(v); 8. color[u] = BLACK; 9. time = time+1; 10. f[u] = time; 43

DFS και Κύκλοι Γραφήματος DFS(G) 1. for each vertex u G->V 2. color[u] = WHITE; 3. p[u] = null 4. time = 0; 5. for each vertex u G->V 6. if (color[u] == WHITE) 7. DFS_Visit(u); Προσθήκη «μπλε» εντολών στον DFS αλγόριθμο ώστε να προσδιορίζει κύκλο DFS_Visit(u) 1. color[u] = GREY; 2. time = time+1; 3. d[u] = time; 4. for each v Adj[u] 5. if (color[v]==grey and p[u] v) 6. return the cycle (u, p[u]), (p[u], p[p[u]], (v, u) 7. if (color[v] == WHITE) 8. p[v] = u; 9. DFS_Visit(v); 10. color[u] = BLACK; 11. time = time+1; 12. f[u] = time; 44

Προσανατολισμένο Ακυκλο Γράφημα Ένα προσανατολισμένο άκυκλο γράφημα (directed acyclic graph) ή DAG είναι ένα προσανατολισμένο γράφημα χωρίς προσανατολισμένους κύκλους. Ένα προσανατολισμένο γράφημα G είναι άκυκλο αν και μόνο η DFS του G δε δημιουργεί ανιούσες ακμές. 45

Τοπολογική Ταξινόμηση Τοπολογική ταξινόμηση (Topological sort) ενός DAG: Γραμμική διάταξη όλων των κορυφών του γραφήματος G έτσι ώστε η κορυφή u να εμφανίζεται πριν από την κορυφή αν η ακμή (u, v) G Τα προσανατολισμένα άκυκλα γραφήματα χρησιμοποιούνται σε πολλές εφαρμογές που απαιτούν να υποδειχθεί μια σειρά προτεραιότητας σε ορισμένα γεγονότα. Παράδειγμα από την καθημερινή ζωή: ντύσιμο 46

Πρωινό ντύσιμο εσώρουχα παντελόνι ζώνη πουκάμισο γραβάτα Κάλτσες παπούτσια ρολόι σακάκι 47

Αλγόριθμος Τοπολογικής Ταξινόμησης Topological-Sort() { 1. Καλούμε την DFS(G) για τον υπολογισμό του χρόνου περάτωσης f[v] για κάθε κόμβο v 2. Μετά την περάτωση κάθε κόμβου, τον τοποθετούμε επικεφαλής μιας αλυσίδας (λίστας) 3. Επιστροφή η αλυσίδα κόμβων } Χρόνος: Θ(V+E) δεδομένου ότι η DFS διερεύνηση απαιτεί χρόνο Θ(V+E) ενώ η εισαγωγή καθεμιάς από τις V κορυφές στην κορυφή της αλυσίδας απαιτεί χρόνο Ο(1). 48

Πρωινό ντύσιμο τοπολογική ταξινόμηση 11/16 εσώρουχα Κάλτσες 17/18 ρολόι 9/10 12/15 παντελόνι πουκάμισο 1/8 παπούτσια 13/14 6/7 ζώνη γραβάτα 2/5 σακάκι 3/4 κάλτσες εσώρουχα Παντελόνι Παπούτσια ρολόι Πουκάμισο ζώνη γραβάτα σακάκι 17/18 11/16 12/15 13/14 9/10 1/8 6/7 2/5 3/4 49

Τέλος Ενότητας