1 / 50

Δομές Δεδομένων

Δομές Δεδομένων. - DFS σε κατευθυνόμενο γράφο Ελάχιστα Μονοπάτια Τοπολογική Ταξινόμηση E λάχιστα Ζευγνύοντα Δένδρα. Depth First Search. Μέθοδος που χρησιμοποιείται ευρύτατα από πολλούς αλγορίθμους γραφημάτων. Μπορεί να χρησιμοποιηθεί για : Να απαντήσει αν ο γράφος είναι συνεκτικός ή όχι,

marek
Download Presentation

Δομές Δεδομένων

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Δομές Δεδομένων • - DFS σε κατευθυνόμενο γράφο • Ελάχιστα Μονοπάτια • Τοπολογική Ταξινόμηση • Eλάχιστα Ζευγνύοντα Δένδρα Τμήμα Πληροφορικής ΑΠΘ

  2. Depth First Search Μέθοδος που χρησιμοποιείται ευρύτατα από πολλούς αλγορίθμους γραφημάτων. Μπορεί να χρησιμοποιηθεί για: • Να απαντήσει αν ο γράφος είναι συνεκτικός ή όχι, • Να προσδιοριστούν οι συνεκτικές συνιστώσες του γράφου, • Να προσδιορίσουμε τα σημεία άρθρωσης, • … Τμήμα Πληροφορικής ΑΠΘ

  3. 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; } Τμήμα Πληροφορικής ΑΠΘ

  4. Παράδειγμα DFS Πηγή Τμήμα Πληροφορικής ΑΠΘ

  5. Παράδειγμα DFS Πηγή d f 1 | | | | | | | | Τμήμα Πληροφορικής ΑΠΘ

  6. Παράδειγμα DFS Πηγή d f 1 | | | 2 | | | | | Τμήμα Πληροφορικής ΑΠΘ

  7. Παράδειγμα DFS Πηγή d f 1 | | | 2 | | 3 | | | Τμήμα Πληροφορικής ΑΠΘ

  8. Παράδειγμα DFS Πηγή d f 1 | | | 2 | | 3 | 4 | | Τμήμα Πληροφορικής ΑΠΘ

  9. Παράδειγμα DFS Πηγή d f 1 | | | 2 | | 3 | 4 5 | | Τμήμα Πληροφορικής ΑΠΘ

  10. Παράδειγμα DFS Πηγή d f 1 | | | 2 | | 3 | 4 5 | 6 | Τμήμα Πληροφορικής ΑΠΘ

  11. Παράδειγμα DFS Πηγή d f 1 | 8 | | 2 | 7 | 3 | 4 5 | 6 | Τμήμα Πληροφορικής ΑΠΘ

  12. Παράδειγμα DFS Πηγή d f 1 | 8 | | 2 | 7 | 3 | 4 5 | 6 | Τμήμα Πληροφορικής ΑΠΘ

  13. Παράδειγμα DFS Πηγή d f 1 | 8 | | 2 | 7 9 | 3 | 4 5 | 6 | Τμήμα Πληροφορικής ΑΠΘ

  14. Παράδειγμα DFS Πηγή d f 1 | 8 | | 2 | 7 9 |10 3 | 4 5 | 6 | Τμήμα Πληροφορικής ΑΠΘ

  15. Παράδειγμα DFS Πηγή d f 1 | 8 |11 | 2 | 7 9 |10 3 | 4 5 | 6 | Τμήμα Πληροφορικής ΑΠΘ

  16. Παράδειγμα DFS Πηγή d f 1 |12 8 |11 | 2 | 7 9 |10 3 | 4 5 | 6 | Τμήμα Πληροφορικής ΑΠΘ

  17. Παράδειγμα DFS Πηγή d f 1 |12 8 |11 13| 2 | 7 9 |10 3 | 4 5 | 6 | Τμήμα Πληροφορικής ΑΠΘ

  18. Παράδειγμα DFS Πηγή d f 1 |12 8 |11 13| 2 | 7 9 |10 3 | 4 5 | 6 14| Τμήμα Πληροφορικής ΑΠΘ

  19. Παράδειγμα DFS Πηγή d f 1 |12 8 |11 13| 2 | 7 9 |10 3 | 4 5 | 6 14|15 Τμήμα Πληροφορικής ΑΠΘ

  20. Παράδειγμα DFS Πηγή d f 1 |12 8 |11 13|16 2 | 7 9 |10 3 | 4 5 | 6 14|15 Τμήμα Πληροφορικής ΑΠΘ

  21. DAG DAG = Directed Acyclic Graph Κατευθυνόμενος γράφος χωρίς κύκλους Τμήμα Πληροφορικής ΑΠΘ

  22. Βασικό Θεώρημα Ένας γράφος G(V,E) είναι DAG εάν και μόνο εάν το δένδρο DFS που προκύπτει δεν έχει πίσω βέλη. Τμήμα Πληροφορικής ΑΠΘ

  23. Τοπολογική Ταξινόμηση Underwear Socks Watch Pants Shoes Shirt Belt Tie Jacket Socks Underwear Pants Shoes Watch Shirt Belt Tie Jacket Τμήμα Πληροφορικής ΑΠΘ

  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? A 6 4 5 9 H B C 14 2 10 15 G E D 3 8 F Τμήμα Πληροφορικής ΑΠΘ

  29. Minimum Spanning Tree A 6 4 5 9 H B C 14 2 10 15 G E D 3 8 F Τμήμα Πληροφορικής ΑΠΘ

  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 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 Τμήμα Πληροφορικής ΑΠΘ

  32. 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 Τμήμα Πληροφορικής ΑΠΘ

  33. 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 Τμήμα Πληροφορικής ΑΠΘ

  34. 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  Τμήμα Πληροφορικής ΑΠΘ

  35. 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 Τμήμα Πληροφορικής ΑΠΘ

  36. 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 Τμήμα Πληροφορικής ΑΠΘ

  37. 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 Τμήμα Πληροφορικής ΑΠΘ

  38. 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 Τμήμα Πληροφορικής ΑΠΘ

  39. 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 Τμήμα Πληροφορικής ΑΠΘ

  40. 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 Τμήμα Πληροφορικής ΑΠΘ

  41. 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 Τμήμα Πληροφορικής ΑΠΘ

  42. 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 Τμήμα Πληροφορικής ΑΠΘ

  43. 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 Τμήμα Πληροφορικής ΑΠΘ

  44. 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 Τμήμα Πληροφορικής ΑΠΘ

  45. 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 Τμήμα Πληροφορικής ΑΠΘ

  46. 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 Τμήμα Πληροφορικής ΑΠΘ

  47. 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 Τμήμα Πληροφορικής ΑΠΘ

  48. 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 Τμήμα Πληροφορικής ΑΠΘ

  49. 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 Τμήμα Πληροφορικής ΑΠΘ

  50. 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 Τμήμα Πληροφορικής ΑΠΘ

More Related