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

Σχετικά έγγραφα
ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

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

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

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

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

(elementary graph algorithms)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

(elementary graph algorithms)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Κεφάλαιο 3. Γραφήµατα v1.0 ( ) Χρησιµοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne.

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

Outline 1 Άσκηση 1: Εφαρμογές BFS DFS 2 Άσκηση 2: Μια Συνάρτηση Κόστους σε Κατευθυνόμενα Γραφήματα 3 Άσκηση 3: Ανάλυση Ασφάλειας 4 Άσκηση 4: Το Σύνολο

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

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

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

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

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

Άσκηση 3 (ανακοινώθηκε στις 14 Μαΐου 2018, προθεσμία παράδοσης: 8 Ιουνίου 2018, 12 τα μεσάνυχτα).

ΠΕΡΙΕΧΟΜΕΝΑ ΚΕΦΑΛΑΙΟ 2 ΠΡΟΒΛΗΜΑΤΑ ΔΙΚΤΥΩΝ ΚΑΙ ΜΕΤΑΣΧΗΜΑΤΙΣΜΟΙ

Κεφάλαιο 3. Γραφήµατα v1.1 ( ) Χρησιµοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne.

Κεφάλαιο 3. Γραφήματα. v1.3 ( ) Χρησιμοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne.

Διερεύνηση γραφήματος

Κεφάλαιο 3. Γραφήματα. ver. 21/12/2014. Χρησιμοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne.

Στοιχεία Θεωρίας Γράφων (Graph Theory)

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

Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων

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

Προσεγγιστικοί Αλγόριθμοι

Διάλεξη 18: Γράφοι I - Εισαγωγή

Δομές Δεδομένων και Αλγόριθμοι

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

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

Ελαφρύτατες διαδρομές

Διαπεράσεις Μη Κατευθυνόμενων Γραφημάτων

Αλγόριθμοι Ισχυρά συνεκτικές συνιστώσες Εφαρμογές, BFS

Πανεπιστήμιο Δυτικής Μακεδονίας. Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών. Διακριτά Μαθηματικά. Ενότητα 3: Δένδρα

Θεωρία Γραφημάτων 5η Διάλεξη

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

Δένδρα. Μαθηματικά (συνδυαστικά) αντικείμενα. Έχουν κεντρικό ρόλο στην επιστήμη των υπολογιστών :

ΔΙΑΣΧΙΣΗ ΓΡΑΦΗΜΑΤΩΝ 1

ΠΛΗ111. Ανοιξη Μάθηµα 10 ο. Γράφοι. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

Κεφάλαιο 4 Γραφήματα και Δένδρα

Αλγόριθµοι Τύπου Μείωσης Προβλήµατος

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

Γράφημα. Συνδυαστικό αντικείμενο που αποτελείται από 2 σύνολα: Σύνολο κορυφών (vertex set) Σύνολο ακμών (edge set) 4 5 πλήθος κορυφών πλήθος ακμών

Σχεδιαση Αλγοριθμων -Τμημα Πληροφορικης ΑΠΘ - Κεφαλαιο 9ο

Outline 1 Άσκηση 1 2 Άσκηση 2 3 Άσκηση 3 4 Άσκηση 4 5 Άσκηση 5 6 Προγραμματιστική Άσκηση 1 7 Προγραμματιστική Άσκηση 2 (CoReLab - NTUA) Αλγόριθμοι - 3

Θεωρία Γραφημάτων 5η Διάλεξη

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

ΠΛΗ 20, 6 η ΟΣΣ: Δέντρα Εξετάσεις

Θεωρία Γραφημάτων Θεμελιώσεις-Αλγόριθμοι-Εφαρμογές

ΠΡΟΛΟΓΟΣ. Θεσσαλονίκη, Μάρτιος Οι συγγραφείς. Κ. Παπαρρίζος, Ν. Σαμαράς, Α. Σιφαλέρας.

Αφηρημένες Δομές Δεδομένων. Στοίβα (Stack) Υλοποίηση στοίβας

Ενότητες 3 & 4: Δένδρα, Σύνολα & Λεξικά Ασκήσεις και Λύσεις

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

Θεωρία και Αλγόριθμοι Γράφων

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

ΣΧΕΔΙΑΣΗ ΚΑΙ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

Προσεγγιστικοί Αλγόριθμοι

έντρα ιδάσκοντες:. Φωτάκης,. Σούλιου Επιμέλεια διαφανειών:. Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο

Συνεκτικότητα Γραφήματος

Θεωρία και Αλγόριθμοι Γράφων

Transcript:

Αλγόριθμοι Γραφημάτων 1. Διερεύνηση Πρώτα σε Βάθος (DFS) 2. Τοπολογική Ταξινόμηση Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη

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

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

Αλγόριθμος 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; 4

Αλγόριθμος 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; 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); Η μεταβλητή 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; 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); Θα χρωματιστούν όλες οι κορυφές μαύρες? 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

DFS Example source vertex 8

DFS Example source vertex d f 1 9

DFS Example source vertex d f 1 2 10

DFS Example source vertex d f 1 2 3 11

DFS Example source vertex d f 1 2 3 4 12

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

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

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

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

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

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

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

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

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

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

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

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

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; Ποιος θα είναι ο χρόνος εκτέλεσης? 25

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; 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()? 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-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 + Ε). 28

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

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

DFS: Είδη ακμών DFS εισάγει μια σημαντική διάκριση μεταξύ των ακμών του αρχικού γραφήματος : Δενδρικές ακμές (Tree edge): όταν συναντά μια νέα (λευκή) κορυφή Ανιούσες ακμές (Back edge): από απόγονο σε πρόγονο Συναντά μια γκρι κορυφή (γκρι σε γκρι) 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) Ανιούσες ακμές (Back edges) 32

DFS: Είδη ακμών DFS εισάγει μια σημαντική διάκριση μεταξύ των ακμών του αρχικού γραφήματος : Δενδρικές ακμές (Tree edge): όταν συναντά μια νέα (λευκή) κορυφή Ανιούσες ακμές (Back edge): από απόγονο σε πρόγονο Κατιούσες ακμές (Forward edge): από πρόγονο σε from απόγονο Όχι ακμή δένδρου Από γκρι κορυφή σε μαύρη 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) Κατιούσες ακμές Forward edges 34

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

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

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

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 είναι ακόμη γκρι τη στιγμή που ακμή εξερευνάται για πρώτη φορά. 39

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

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; 41

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; 42

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

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

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

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

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