Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ1 Δομές Δεδομένων - DFS σε κατευθυνόμενο γράφο - Ελάχιστα Μονοπάτια - Τοπολογική Ταξινόμηση - Eλάχιστα Ζευγνύοντα Δένδρα
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ2 Depth First Search Μέθοδος που χρησιμοποιείται ευρύτατα από πολλούς αλγορίθμους γραφημάτων. Μπορεί να χρησιμοποιηθεί για: Να απαντήσει αν ο γράφος είναι συνεκτικός ή όχι, Να προσδιοριστούν οι συνεκτικές συνιστώσες του γράφου, Να προσδιορίσουμε τα σημεία άρθρωσης, …
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ3 Αλγόριθμος DFS DFS(G) { for each vertex u G->V { u->color = EMPTY; } time = 0; for each vertex u G->V { if (u->color == EMPTY) DFS_Visit(u); } DFS_Visit(u) { u->color = YELLOW; time = time+1; u->d = time; for each v u->Adj[] { if (v->color == EMPTY) DFS_Visit(v); } u->color = WHITE; time = time+1; u->f = time; }
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ4 Παράδειγμα DFS Πηγή
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ5 1 | | | | | | | | d f Πηγή Παράδειγμα DFS
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ6 1 | | | | | | 2 | | d f Πηγή Παράδειγμα DFS
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ7 1 | | | | |3 | 2 | | d f Πηγή Παράδειγμα DFS
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ8 1 | | | | |3 | 4 2 | | d f Πηγή Παράδειγμα DFS
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ9 1 | | | |5 |3 | 4 2 | | d f Πηγή Παράδειγμα DFS
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ10 1 | | | |5 | 63 | 4 2 | | d f Πηγή Παράδειγμα DFS
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ11 1 |8 | | |5 | 63 | 4 2 | 7 | d f Πηγή Παράδειγμα DFS
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ12 1 |8 | | |5 | 63 | 4 2 | 7 | d f Πηγή Παράδειγμα DFS
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ13 1 |8 | | |5 | 63 | 4 2 | 79 | d f Πηγή Παράδειγμα DFS
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ14 1 |8 | | |5 | 63 | 4 2 | 79 |10 d f Πηγή Παράδειγμα DFS
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ15 1 |8 |11 | |5 | 63 | 4 2 | 79 |10 d f Πηγή Παράδειγμα DFS
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ16 1 |128 |11 | |5 | 63 | 4 2 | 79 |10 d f Πηγή Παράδειγμα DFS
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ17 1 |128 |1113| |5 | 63 | 4 2 | 79 |10 d f Πηγή Παράδειγμα DFS
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ18 1 |128 |1113| 14|5 | 63 | 4 2 | 79 |10 d f Πηγή Παράδειγμα DFS
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ19 1 |128 |1113| 14|155 | 63 | 4 2 | 79 |10 d f Πηγή Παράδειγμα DFS
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ20 1 |128 |1113|16 14|155 | 63 | 4 2 | 79 |10 d f Πηγή Παράδειγμα DFS
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ21 DAG DAG = Directed Acyclic Graph Κατευθυνόμενος γράφος χωρίς κύκλους
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ22 Βασικό Θεώρημα Ένας γράφος G(V,E) είναι DAG εάν και μόνο εάν το δένδρο DFS που προκύπτει δεν έχει πίσω βέλη.
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ23 Τοπολογική Ταξινόμηση UnderwearSocks ShoesPants Belt Shirt Watch Tie Jacket SocksUnderwearPantsShoesWatchShirtBeltTieJacket
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ24 Μέθοδος Topological-Sort() { Εκτέλεση DFS Όταν ολοκληρώσουμε την επίσκεψη σε μία κορυφή, τη δίνουμε στην έξοδο. Οι κορυφές δίδονται στην έξοδο με αντίστροφη σειρά. } Κόστος: O(V+E)
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ25 Ελάχιστα Μονοπάτια Πρόβλημα: Σε ένα γράφο G(V,E) με βάρη, δίνονται οι κορυφές Α και Β και ζητείται να προσδιορίσουμε ένα μονοπάτι που έχει το ελάχιστο κόστος μετάβασης από την Α στη Β.
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ26 Tokyo Subway Map
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ27 Ελάχιστα Ζευγνύοντα Δένδρα Αλλιώς: Minimum Spanning Trees (MST) Είναι το δένδρο που προκύπτει από έναν γράφο G(V,E) αν κρατήσουμε τις ακμές που δίνουν αθροιστικά το ελάχιστο κόστος και ο γράφος που απομένει είναι συνδεδεμένος.
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ28 Minimum Spanning Tree Ποιες ακμές πρέπει να κρατήσουμε στο παρακάτω γράφημα για να έχουμε MST? HBC GED F A
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ29 Minimum Spanning Tree HBC GED F A
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ30 Prim’s Algorithm MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v);
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ31 Prim’s Algorithm MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v); Run on example graph
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ32 Prim’s Algorithm MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v); Run on example graph
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ33 Prim’s Algorithm MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v); 0 Pick a start vertex r r
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ34 Prim’s Algorithm MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v); 0 u
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ35 Prim’s Algorithm MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v); 0 3 u
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ36 Prim’s Algorithm MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v); 14 0 3 u
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ37 Prim’s Algorithm MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v); 14 0 3 u
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ38 Prim’s Algorithm MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v); 14 08 3 u
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ39 Prim’s Algorithm MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v); 10 08 3 u
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ40 Prim’s Algorithm MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v); 10 08 3 u
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ41 Prim’s Algorithm MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v); 102 08 3 u
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ42 Prim’s Algorithm MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v); 102 u
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ43 Prim’s Algorithm MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v); 102 u
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ44 Prim’s Algorithm MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v); u
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ45 Prim’s Algorithm MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v); u
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ46 Prim’s Algorithm MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v); u
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ47 Prim’s Algorithm MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v); u
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ48 Prim’s Algorithm MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v); u
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ49 Prim’s Algorithm MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v); u
Δομές ΔεδομένωνΤμήμα Πληροφορικής ΑΠΘ50 Prim’s Algorithm MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v); u