500 likes | 620 Views
Δομές Δεδομένων. - DFS σε κατευθυνόμενο γράφο Ελάχιστα Μονοπάτια Τοπολογική Ταξινόμηση E λάχιστα Ζευγνύοντα Δένδρα. Depth First Search. Μέθοδος που χρησιμοποιείται ευρύτατα από πολλούς αλγορίθμους γραφημάτων. Μπορεί να χρησιμοποιηθεί για : Να απαντήσει αν ο γράφος είναι συνεκτικός ή όχι,
E N D
Δομές Δεδομένων • - DFS σε κατευθυνόμενο γράφο • Ελάχιστα Μονοπάτια • Τοπολογική Ταξινόμηση • Eλάχιστα Ζευγνύοντα Δένδρα Τμήμα Πληροφορικής ΑΠΘ
Depth First Search Μέθοδος που χρησιμοποιείται ευρύτατα από πολλούς αλγορίθμους γραφημάτων. Μπορεί να χρησιμοποιηθεί για: • Να απαντήσει αν ο γράφος είναι συνεκτικός ή όχι, • Να προσδιοριστούν οι συνεκτικές συνιστώσες του γράφου, • Να προσδιορίσουμε τα σημεία άρθρωσης, • … Τμήμα Πληροφορικής ΑΠΘ
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 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; } Τμήμα Πληροφορικής ΑΠΘ
Παράδειγμα DFS Πηγή Τμήμα Πληροφορικής ΑΠΘ
Παράδειγμα DFS Πηγή d f 1 | | | | | | | | Τμήμα Πληροφορικής ΑΠΘ
Παράδειγμα DFS Πηγή d f 1 | | | 2 | | | | | Τμήμα Πληροφορικής ΑΠΘ
Παράδειγμα DFS Πηγή d f 1 | | | 2 | | 3 | | | Τμήμα Πληροφορικής ΑΠΘ
Παράδειγμα DFS Πηγή d f 1 | | | 2 | | 3 | 4 | | Τμήμα Πληροφορικής ΑΠΘ
Παράδειγμα DFS Πηγή d f 1 | | | 2 | | 3 | 4 5 | | Τμήμα Πληροφορικής ΑΠΘ
Παράδειγμα DFS Πηγή d f 1 | | | 2 | | 3 | 4 5 | 6 | Τμήμα Πληροφορικής ΑΠΘ
Παράδειγμα DFS Πηγή d f 1 | 8 | | 2 | 7 | 3 | 4 5 | 6 | Τμήμα Πληροφορικής ΑΠΘ
Παράδειγμα DFS Πηγή d f 1 | 8 | | 2 | 7 | 3 | 4 5 | 6 | Τμήμα Πληροφορικής ΑΠΘ
Παράδειγμα DFS Πηγή d f 1 | 8 | | 2 | 7 9 | 3 | 4 5 | 6 | Τμήμα Πληροφορικής ΑΠΘ
Παράδειγμα DFS Πηγή d f 1 | 8 | | 2 | 7 9 |10 3 | 4 5 | 6 | Τμήμα Πληροφορικής ΑΠΘ
Παράδειγμα DFS Πηγή d f 1 | 8 |11 | 2 | 7 9 |10 3 | 4 5 | 6 | Τμήμα Πληροφορικής ΑΠΘ
Παράδειγμα DFS Πηγή d f 1 |12 8 |11 | 2 | 7 9 |10 3 | 4 5 | 6 | Τμήμα Πληροφορικής ΑΠΘ
Παράδειγμα DFS Πηγή d f 1 |12 8 |11 13| 2 | 7 9 |10 3 | 4 5 | 6 | Τμήμα Πληροφορικής ΑΠΘ
Παράδειγμα DFS Πηγή d f 1 |12 8 |11 13| 2 | 7 9 |10 3 | 4 5 | 6 14| Τμήμα Πληροφορικής ΑΠΘ
Παράδειγμα DFS Πηγή d f 1 |12 8 |11 13| 2 | 7 9 |10 3 | 4 5 | 6 14|15 Τμήμα Πληροφορικής ΑΠΘ
Παράδειγμα DFS Πηγή d f 1 |12 8 |11 13|16 2 | 7 9 |10 3 | 4 5 | 6 14|15 Τμήμα Πληροφορικής ΑΠΘ
DAG DAG = Directed Acyclic Graph Κατευθυνόμενος γράφος χωρίς κύκλους Τμήμα Πληροφορικής ΑΠΘ
Βασικό Θεώρημα Ένας γράφος G(V,E) είναι DAG εάν και μόνο εάν το δένδρο DFS που προκύπτει δεν έχει πίσω βέλη. Τμήμα Πληροφορικής ΑΠΘ
Τοπολογική Ταξινόμηση Underwear Socks Watch Pants Shoes Shirt Belt Tie Jacket Socks Underwear Pants Shoes Watch Shirt Belt Tie Jacket Τμήμα Πληροφορικής ΑΠΘ
Μέθοδος Topological-Sort() { Εκτέλεση DFS Όταν ολοκληρώσουμε την επίσκεψη σε μία κορυφή, τη δίνουμε στην έξοδο. Οι κορυφές δίδονται στην έξοδο με αντίστροφη σειρά. } • Κόστος: O(V+E) Τμήμα Πληροφορικής ΑΠΘ
Ελάχιστα Μονοπάτια Πρόβλημα: Σε ένα γράφο G(V,E) με βάρη, δίνονται οι κορυφές Α και Β και ζητείται να προσδιορίσουμε ένα μονοπάτι που έχει το ελάχιστο κόστος μετάβασης από την Α στη Β. Τμήμα Πληροφορικής ΑΠΘ
Tokyo Subway Map Τμήμα Πληροφορικής ΑΠΘ
Ελάχιστα Ζευγνύοντα Δένδρα Αλλιώς: Minimum Spanning Trees (MST) Είναι το δένδρο που προκύπτει από έναν γράφο G(V,E) αν κρατήσουμε τις ακμές που δίνουν αθροιστικά το ελάχιστο κόστος και ο γράφος που απομένει είναι συνδεδεμένος. Τμήμα Πληροφορικής ΑΠΘ
Minimum Spanning Tree Ποιες ακμές πρέπει να κρατήσουμε στο παρακάτω γράφημα για να έχουμε MST? A 6 4 5 9 H B C 14 2 10 15 G E D 3 8 F Τμήμα Πληροφορικής ΑΠΘ
Minimum Spanning Tree A 6 4 5 9 H B C 14 2 10 15 G E D 3 8 F Τμήμα Πληροφορικής ΑΠΘ
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); Τμήμα Πληροφορικής ΑΠΘ
Prim’s Algorithm 6 4 9 5 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 2 10 15 3 8 Run on example graph Τμήμα Πληροφορικής ΑΠΘ
Prim’s Algorithm 6 4 9 5 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 2 10 15 3 8 Run on example graph Τμήμα Πληροφορικής ΑΠΘ
Prim’s Algorithm 6 4 9 5 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 2 10 15 r 0 3 8 Pick a start vertex r Τμήμα Πληροφορικής ΑΠΘ
Prim’s Algorithm 6 4 9 5 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 2 10 15 u 0 3 8 Τμήμα Πληροφορικής ΑΠΘ
Prim’s Algorithm 6 4 9 5 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 2 10 15 u 0 3 8 3 Τμήμα Πληροφορικής ΑΠΘ
Prim’s Algorithm 6 4 9 5 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 14 2 10 15 u 0 3 8 3 Τμήμα Πληροφορικής ΑΠΘ
Prim’s Algorithm 6 4 9 5 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 14 2 10 15 0 3 8 3 u Τμήμα Πληροφορικής ΑΠΘ
Prim’s Algorithm 6 4 9 5 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 14 2 10 15 0 8 3 8 3 u Τμήμα Πληροφορικής ΑΠΘ
Prim’s Algorithm 6 4 9 5 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 14 2 10 15 0 8 3 8 3 u Τμήμα Πληροφορικής ΑΠΘ
Prim’s Algorithm 6 4 9 5 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 14 2 10 15 0 8 3 8 3 u Τμήμα Πληροφορικής ΑΠΘ
Prim’s Algorithm 6 4 9 5 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 2 14 2 10 15 0 8 3 8 3 u Τμήμα Πληροφορικής ΑΠΘ
Prim’s Algorithm 6 4 9 5 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 2 14 2 10 15 0 8 15 3 8 3 u Τμήμα Πληροφορικής ΑΠΘ
Prim’s Algorithm u 6 4 9 5 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 2 14 2 10 15 0 8 15 3 8 3 Τμήμα Πληροφορικής ΑΠΘ
Prim’s Algorithm u 6 4 9 5 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 2 9 14 2 10 15 0 8 15 3 8 3 Τμήμα Πληροφορικής ΑΠΘ
Prim’s Algorithm u 4 6 4 9 5 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 2 9 14 2 10 15 0 8 15 3 8 3 Τμήμα Πληροφορικής ΑΠΘ
Prim’s Algorithm u 4 6 4 9 5 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); 5 2 9 14 2 10 15 0 8 15 3 8 3 Τμήμα Πληροφορικής ΑΠΘ
Prim’s Algorithm u 4 6 4 9 5 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); 5 2 9 14 2 10 15 0 8 15 3 8 3 Τμήμα Πληροφορικής ΑΠΘ
Prim’s Algorithm u 4 6 4 9 5 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); 5 2 9 14 2 10 15 0 8 15 3 8 3 Τμήμα Πληροφορικής ΑΠΘ
Prim’s Algorithm u 4 6 4 9 5 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); 5 2 9 14 2 10 15 0 8 15 3 8 3 Τμήμα Πληροφορικής ΑΠΘ
Prim’s Algorithm 4 6 4 9 5 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); 5 2 9 u 14 2 10 15 0 8 15 3 8 3 Τμήμα Πληροφορικής ΑΠΘ