Minimum Spanning Trees1 “Ελάχιστα” συνδετικά δέντρα JFK BOS MIA ORD LAX DFW SFO BWI PVD
Minimum Spanning Trees2 Περίληψη και ανάγνωση “Ελάχιστα” συνδετικά δέντρα Ορισμοί Το κρίσιμο γεγονός Ο αλγόριθμος του Prim-Jarnik Ο αλγόριθμος του Kruskal's Ο Baruvka's Αλγόριθμος
Minimum Spanning Trees3 “Ελάχιστα” συνδετικά δέντρα Συνδετικός υπο-γράφος Ο υπο-γράφος ενός γράφου G περιέχει όλες τις κορυφές του G Συνδετικό δέντρο Ο συνδετικός υπο-γράφος είναι από μόνος του ένα δέντρο “Ελάχιστο” συνδετικό δέντρο (MST) Συνδετικό δέντρο ενός γράφου με το ελάχιστο συνολικό μήκος ακμών Εφαρμογές Δίκτυα επικοινωνιών Δίκτυα μεταφοράς ORD PIT ATL STL DEN DFW DCA
Minimum Spanning Trees4 Κυκλική Ιδιότητα Κυκλική ιδιότητα: Έστω T “ελάχιστο” συνδετικό δέντρο ενός γράφου με βάρη G Έστω e μια ακμή του G όπου δεν ανήκει στο T και C είναι ο κύκλος που διαμορφώνεται από το e με το T Για κάθε ακμή f του C, weight(f) weight(e) Απόδειξη: Από την αντίφαση If weight(f) weight(e) μπορούμε να πάρουμε συνδετικό δέντρο μικρότερου βάρους αντικαθιστώντας το e με f e C f C e f Η αντικατάσταση του f με το e επιφέρει ένα καλύτερο συνδετικό δέντρο (με μικρότερο συνολικό βάρος)
Minimum Spanning Trees5 UV Ιδιότητα διαχωρισμού Ιδιότητα διαχωρισμού: Θεωρούμε ένα partition των κορυφών του G στα υποσύνολα U και V Έστω e η ακμή του ελάχιστου βάρους κατά μήκος του partition Υπάρχει ένα “ελάχιστο” συνδετικό δέντρο του G που περιέχει την ακμή e Απόδειξη: Έστω T ένα MST του G Αν T δεν περιέχει το e, θεωρούμε το κύκλο C formed by e με T και f είναι η ακμή C κατά μήκος του partition Από την κυκλική ιδιότητα, weight(f) weight(e) Κατά συνέπεια, weight(f) weight(e) Πέρνουμε ένα άλλο MST αντικαθιστώνας το f με e e f e f Η αντικατάσταση του f με το e επιφέρει ένα άλλο MST UV
Minimum Spanning Trees6 Ο Αλγόριθμος των Prim-Jarnik Παρόμοιος με τον αλγόριθμο Dijkstra’s (για έναν συνδεδεμένο γράφο) Επλέγουμε κάποια κορυφή s και αυξάνουμε το MST σαν σύννεφο κορυφών, ξεκινώντας από s Αποθηκεύουμε με κάθε κορυφή v μία ετικέτα d(v) = το μικρότερο βάρος μιας ακμής που συνδέει το v με μία κορυφή στο σύννεφο Σε κάθε βήμα: Προσθέτουμε στο σύννεφο την κορυφή u outside the cloud με την μικρότερη τιμή ετικέτας Ανανεώνουμε τις ετικέτες των κορυφών γύρω από το u
Minimum Spanning Trees7 Ο Αλγόριθμος των Prim-Jarnik’s Μία ουρά αναμονής με προτεραιότητα αποθηκεύει τις κορυφές έξω από το σύννεφο Κλειδί: απόσταση Στοιχείο: κορυφή Μέθοδοι Locator-based insert(k,e) επιστρέφει ένα locator replaceKey(l,k) αλλάζει το κλειδί ενός αντικειμένου Αποθηκεύουμε τρεις ετικέτες σε κάθε κορυφή: Απόσταση Parent ακμή στο MST Locator σε σειρά αναμονής με προτεραιότητα Algorithm PrimJarnikMST(G) Q new heap-based priority queue s a vertex of G for all v G.vertices() if v s setDistance(v, 0) else setDistance(v, ) setParent(v, ) l Q.insert(getDistance(v), v) setLocator(v,l) while Q.isEmpty() u Q.removeMin() for all e G.incidentEdges(u) z G.opposite(u,e) r weight(e) if r getDistance(z) setDistance(z,r) setParent(z,e) Q.replaceKey(getLocator(z),r)
Minimum Spanning Trees8 Παράδειγμα B D C A F E B D C A F E 7 B D C A F E 7 B D C A F E
Minimum Spanning Trees9 Παράδειγμα (συν.) B D C A F E B D C A F E
Minimum Spanning Trees10 Ανάλυση Λειτουργίες γράφων Η μέθοδος incidentEdges καλείται μια φορά για κάθε κορυφή Λειτουργίες ετικέτων We set/get την απόσταση, ο πατέρας και οι ετικέτες του locator μιας κορυφής z O(deg(z)) φορές Setting/getting μια ετικέτα κάνει O(1) χρόνο Λειτουργίες σειράς αναμονής με προτεραιότητα Κάθε κορυφή εισάγεται μία φορά και διαγράφεται μία φορά από τη σειτά αναμονής, όπου κάθε εισαγωγή ή διαγραφή κάνει O(log n) χρόνο Το κλειδί μιας κορυφής w στη σειρά αναμονής αλλάζει το πολύ deg(w) φορές, όπου η αλλαγή κάθε κλειδιού κάνει O(log n) χρόνο Ο αλγόριθμος Prim-Jarnik’s τρέχει σε O((n m) log n) χρόνο υπό τον όρο ότι ο γράφος αναπαριστάται από τη γειτονική list structure Recall that v deg(v) 2m Ο χρόνος εκτέλεσης είναι O(m log n) από τότε που ο γράφος συνδέθηκε
Minimum Spanning Trees11 Ο Αλγόριθμος Kruskal Μία ουρά αναμονής με προτεραιότητα αποθηκεύει τις ακμές έξω από το σύννεφο Κλειδί: βάρος Στοιχείο: ακμή Στο τέλος του αλγορίθμου Αφήνουμε ένα σύννεφο που καλύπτει το MST Ένα δέντρο T όπου είναι το δικό μας MST Algorithm KruskalMST(G) for κάθε κορυφή V στο G do define a Cloud(v) of {v} Έστω Q μια σειρά αναμονής. Εισάγουμε όλες τις κορυφές στο Q χρησιμοποιώντας τα βάρη τους ως κλειδί T while T has fewer than n-1 ακμές doedge e = Q.removeMin() Έστω u, v τα endpoints του e if Cloud(v) Cloud(u) then Add edge e to T Merge Cloud(v) and Cloud(u) return T
Minimum Spanning Trees12 Δομές δεδομένων για τον Αλγόριθμο Kruskal Ο αλγόριθμος διατηρεί ένα δάσος από δέντρα Μία ακμή γίνεται δεκτή αν συνδέει ευδιάκριτα δέντρα Χρειαζόμαστε μία δομή δεδομένων που να διατηρεί partition, πχ, μία συλλογή από disjoint sets, με τις λειτουργίες: -find(u): επέστρεψε το set αποθηκεύοντας u -union(u,v): αντικατέστησε τα sets αποθηκεύοντας u και v με την ένωσή τους aaaa
Minimum Spanning Trees13 Αναπαράσταση ενός Partition Κάθε set αποθηκεύεται σε μία ακολουθία Κάθε στοιχείο έχει μια αναφορά πίσω στο set Η λειτουργία find(u) κάνει O(1) χρόνο, και επιστρέφει το set που το u είναι μέλος. Στη λειτουργία union(u,v), μετακινούμε τα στοιχεία του μικρότερου set στην ακολουθία με το μεγαλύτερο set και κάνουμε update τις αναφορές τους Ο χρόνος για την λειτουργία union(u,v) είναι min(n u,n v ), όπου n u και n v είναι τα μεγέθη των sets που έχουν αποθηκευμένα τα u και v Όποτε ένα στοιχείο προσπελάσεται, πηγαίνει σε ένα set τουλάχιστον διπλασίου μεγέθους, ως εκ τούτου κάθε στοιχείο προσπελάσεται το πολύ log n φορές
Minimum Spanning Trees14 Partition-Based Εφαρμογή Μία partition-based έκδοση του αλγόριθμου Kruskal εκτελεί τις συγχωνεύσεις σύννεφων ως ενώσεις και τις τεστάρει όπως τις βρίσκει Algorithm Kruskal(G): Input: A weighted graph G. Output: An MST T for G. Έστω P ένα partition των κορυφών του G, όπου κάθε κορυφή διαμορφώνει ένα χωριστό set. Έστω Q μία σειρά αναμονής που έχει αποθηκευμένες τις κορυφές του G, ταξινομημένες κατά το βάρος τους Έστω T ένα αρχικά-κενό δέντρο while Q δεν είναι άδειο do (u,v) Q.removeMinElement() if P.find(u) != P.find(v) then Add (u,v) to T P.union(u,v) return T Χρόνος εκτέλεσης O((n+m)log n)
Minimum Spanning Trees15 Kruskal Παράδειγμα JFK BOS MIA ORD LAX DFW SFO BWI PVD
Minimum Spanning Trees16
Minimum Spanning Trees17
Minimum Spanning Trees18
Minimum Spanning Trees19
Minimum Spanning Trees20
Minimum Spanning Trees21
Minimum Spanning Trees22
Minimum Spanning Trees23
Minimum Spanning Trees24
Minimum Spanning Trees25
Minimum Spanning Trees26
Minimum Spanning Trees27
Minimum Spanning Trees
Minimum Spanning Trees29 Ο Αλγόριθμος Baruvka’s Όπως ο αλγόριθμος Kruskal’s, ο Baruvka’s αλγόριθμος αναπτύσει πολλά “σύννεφα” με τη μία. Κάθε επανάληψη του while-loop halves τον αριθμό των συνδεδεμένων στοιχείων στο T. Ο χρόνος εκτέλεσης είναι O(m log n). Algorithm BaruvkaMST(G) T V {μόνο τις κορυφές του G} while T έχει λιγότερες από n-1 ακμές do for each συνδεμένο στοιχείο C στο T do Έστω η ακμή e ότι είναι η μικρότερου βάρους ακμή από το C σε ένα άλλο στοιχείο του T. if e δεν είναι στο T then Πρόσθεσε την ακμή e στο T return T
Minimum Spanning Trees30 Baruvka Παράδειγμα
Minimum Spanning Trees31
Minimum Spanning Trees
Minimum Spanning Trees33 Διακινούμενο πρόβλημα πωλητών Ένα tour του γράφου είναι ένα εκτεινόμενο cycle (πχ, ένα cycle που περνά από όλες τις κορυφές) A traveling salesperson tour ενός γράφου βαρύτητας είναι ένα tour που είναι απλό (πχ, χωρίς επαναλαμβανόμενες κορυφές ή ακμές) και έχει το ελάχιστο βάρος Κανένας πολυωνυμικός-χρονικός αλγόριθμος δεν είναι γνωστός για τον υπολογισμό των διακινούμενων γύρων πωλητών Το διακινούμενο πρόβλημα πωλητών (TSP) είναι ένα σημαντικό ανοικτό πρόβλημα στην πληροφορική Βρείτε έναν πολυωνυμικό-χρονικό αλγόριθμο που να υπολογίζει a traveling salesperson tour ή να αποδεικνύει ότι δεν υπάρχει B D C A F E Παράδειγμα των διακινούμενων πωλητών tour(με βάρος 17)
Minimum Spanning Trees34 Προσέγγιση TSP Μπορούμε να προσεγγίσουμε ένα TSP tour με ένα tour που έχει το πολύ δύο φορές το βάρος για την περίπτωση των Euclidean γράφων Οι κορυφές είναι σημεία στο επίπεδο Κάθε ζευγάρι κορυφών είναι συνδεμένο με μία ακμή Το βάρος μιας ακμής είναι το μήκος από το τμήμα που ενώνει τα σημεία Αλγόριθμος προσέγγισης Υπολογίζει ένα “ελάχιστο” εκτεινόμενο δέντρο Διαμορφώνει έναν Eulerian circuit γύρω από MST Μετατρέπει τον circuit σε tour