ΑΛΓΟΡΙΘΜΟΙ http://eclass.aueb.gr/courses/inf161/ Άνοιξη 016 - I. ΜΗΛΗΣ AΛΓΟΡΙΘΜΟΙ ΓΡΑΦΩΝ ΙΙΙ Minimum Spanning Trees ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 016 - Ι. ΜΗΛΗΣ 14 - GRAPHS III - MSTs 1
Trees Ένας γράφος T = (V, A) είναι δέντρο ΑΝ ΚΑΙ ΜΟΝΟ ΑΝ: is acyclic and connected is connected and has V - 1 edges is acyclic and has V - 1 edges is minimally connected: removal of any edge disconnects it is maimally acyclic: addition of any edge creates a cycle has a unique simple path between every pair of vertices 1 3 6 4 5 7 8 T = (V, A) ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 016 - Ι. ΜΗΛΗΣ 14 - GRAPHS III - MSTs
Spanning Trees ΕΙΣΟΔΟΣ: Γράφος G=(V, E) ΕΡΩΤΗΣΗ: Ένα δέντρο T = (V, Ε ), Ε Ε 1 3 1 3 6 4 5 6 4 5 8 7 8 7 G = (V, E) T = (V, E ) Συνδέει όλους τους κόμβους του γράφου με τις ελάχιστες ακμές Αλγόριθμος? ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 016 - Ι. ΜΗΛΗΣ 14 - GRAPHS III - MSTs 3
Minimum Spanning Tree (MST) ΕΙΣΟΔΟΣ: Γράφος με βάρη G=(V, E), w(e), e E ΕΡΩΤΗΣΗ: Ένα δέντρο T = (V, Ε ), Ε Ε με το ελάχιστο άθροισμα βαρών των ακμών του 1 4 16 6 7 6 8 10 5 4 3 5 1 14 18 11 4 7 9 8 3 1 4 6 7 6 8 5 5 11 4 7 9 8 3 G = (V, E) T = (V, Ε ) w(t) = 50 Αλγόριθμος? Brute force? There are n n- spanning trees of K n [Cayley, 1889] ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 016 - Ι. ΜΗΛΗΣ 14 - GRAPHS III - MSTs 4
Τομή Γράφου (Graph Cut) Γράφος G=(V,E) ΤΟΜΗ C=(S, V-S), S V : διαμέριση (partition) των κόμβων του G σε δύο υποσύνολα S και V-S C = {(u,v) u S, v V-S}, S V : το υποσύνολο των ακμών με ένα άκρο στο S και ένα στο V-S. 1 6 5 4 3 S S = {4, 5, 8} C = { (5, 6), (5, 7), (3, 4), (3, 5), (7, 8) } 7 8 ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 016 - Ι. ΜΗΛΗΣ 14 - GRAPHS III - MSTs 5
Ιδιότητα τομής (Cut property) Έστω: - Χ ένα υποσύνολο των ακμών ενός MST - C μια τομή του G που δεν περιέχει ακμές από το Χ - e η μικρότερου βάρους ακμή της τομής C Τότε: οι ακμές Χ U {e} ανήκουν σε ένα MST (η ακμή e ανήκει στο ίδιο MST με τις Χ ) Χ Χ ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 016 - Ι. ΜΗΛΗΣ 14 - GRAPHS III - MSTs 6
Proof of Cut Property Oι ακμές Χ ανήκουν σε ένα MST, έστω Τ Έστω ότι e T Κάποια άλλη ακμή e C ανήκει στο Τ w(e ) w(e) Αντικατέστησε την e με την e στο Τ Το T = T U {e} {e } είναι δέντρο (γιατί?) W(T )=W(T) + w(e) w(e ) W(T) ATOΠΟ, γιατί το T είναι MST ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 016 - Ι. ΜΗΛΗΣ 14 - GRAPHS III - MSTs 7
A generic MST algorithm Η ιδιότητα τομής εγγυάται την ορθότητα κάθε αλγορίθμου σαν τον παρακάτω: X = { } \\ edges selected so far While X < V - 1: Choose S V: X has no edges between S and V-S Find the lightest edge e between S and V-S X = X U {e} ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 016 - Ι. ΜΗΛΗΣ 14 - GRAPHS III - MSTs 8
Prim's MST algorithm Εφάρμοσε την ιδιότητα τομής για την τομή S, V-S, όπου S είναι ΕΝΑ ΥΠΟ-ΔΕΝΤΡΟ ενός MST (X είναι το σύνολο των ακμών αυτού του υπό-δέντρου) Ξεκίνα από οποιοδήποτε κόμβο Σε κάθε βήμα προστίθεται στο MST ένας κόμβος και μία ακμή Επαναληπτικά: Διάλεξε τον κόμβο με την μικρότερη απόσταση από το τρέχον υπό-δέντρο (οποιοδήποτε κόμβο του) ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 016 - Ι. ΜΗΛΗΣ 14 - GRAPHS III - MSTs 9
Prim's MST algorithm X = { } \\ edges selected so far S:={} \\ is any verte While X < V - 1: Find the lightest edge e=(u,v)between S and V-S \\ u S, v V-S S = S U {v} X = X U {e} Διάλεξε τον κόμβο με την μικρότερη απόσταση από το τρέχον υπό-δέντρο ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 016 - Ι. ΜΗΛΗΣ 14 - GRAPHS III - MSTs 10
Prim's MST algorithm - eample Διάλεξε τον κόμβο με την μικρότερη απόσταση από το τρέχον υπό-δέντρο Πώς υλοποιείται αποτελεσματικά? ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 016 - Ι. ΜΗΛΗΣ 14 - GRAPHS III - MSTs 11
Prim's MST algorithm π(u): συντομότερη του κόμβου u από το σύνολο S par(u): το MST PRIM(G,w) for all uv: π(u)=, par(u)=nil S={} π(s)=0 MAKE-HEAP (H,s) for all uv-{s}:insert(h,u) while NON EMPTY(H): DELETE-MIN (H,u) S = S U {u} for each vγ(u): if π(v) > w(u,v): π(v)= w(u,v) par(v)=u Greedy algorithm - Greedy choice: Διάλεξε τον κόμβο με τη μικρότερη απόσταση π(u) από το σύνολο S DECREASE-KEY(H,v,π(v) ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 016 - Ι. ΜΗΛΗΣ 14 - GRAPHS III - MSTs 1
Dijkstra's algorithm π(u): συντομότερη απόσταση του κόμβου u από τον αρχικό κόμβο s par(u): τα συντομότερα μονοπάτια DIJKSTRA(G,s,w) for all uv: π(u)=, par(u)=nil S={} π(s)=0 MAKE-HEAP (H,s) for all uv-{s}:insert(h,u) while NON EMPTY(H): DELETE-MIN (H,u) S = S U {u} for each vγ(u): if π(v) > w(u,v)+ π(u): π(v)= w(u,v)+ π(u) par(v)=u Greedy algorithm - Greedy choice: Διάλεξε τον κόμβο με τη μικρότερη απόσταση π(u) από τον κόμβο s DECREASE-KEY(H,v,π(v)) ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 016 - Ι. ΜΗΛΗΣ 14 - GRAPHS III - MSTs 13
Prim s and Dijkstra s algorithms: Compleity # of Operations Heap implementation Binary Binomial* Fibonacci* make-heap: 1 O(1) O(1) O(1) insert: n O(logn) O(1) O(1) delete-min: n O(logn) O(logn) O(logn) decrease-key: m O(logn) O(logn) O(1) Binary heap: 1 + n logn + n logn + m logn ~ O(m logn) Binomial heap: 1 + n + n logn + m logn ~ O(m logn) Fibonacci heap: 1 + n + n logn + m ~ O(m + n logn) * amortized ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 016 - Ι. ΜΗΛΗΣ 14 - GRAPHS III - MSTs 14
Kruskal's MST algorithm Έστω ένα υποσύνολο Χ των ακμών ενός MST του G e=(u,v) X T u and T v τα υπό-δέντρα του Τ στα οποία ανήκουν τα άκρα της e Υπάρχουν δύο περιπτώσεις: 1 η περίπτωση: Εάν T u T v, τότε αγνόησε την e (κύκλος) 1 3 6 4 7 5 Case 1: e=(5, 8) 8 ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 016 - Ι. ΜΗΛΗΣ 14 - GRAPHS III - MSTs 15
Kruskal's MST algorithm Έστω ένα υποσύνολο Χ των ακμών ενός MST του G e=(u,v) X T u and T v τα υπό-δέντρα του Τ στα οποία ανήκουν τα άκρα της e Υπάρχουν δύο περιπτώσεις: η περίπτωση: Εάν T u T v ΚΑΙ η e είναι η μικρότερη στην τομή (T u,v- T u ), τότε X = X U {e} (η e ανήκει στο ΜST) 1 3 6 4 7 5 Case : e=(5, 6) 8 ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 016 - Ι. ΜΗΛΗΣ 14 - GRAPHS III - MSTs 16
Kruskal's MST algorithm η περίπτωση: Εάν T u T v ΚΑΙ η e=(u,v) είναι η μικρότερη στην τομή (T u,v- T u ), τότε X = X U {e} (η e ανήκει στο ΜST) 7 1 6 Αλγόριθμος: 5 4 Case : e=(5, 6) Επαναληπτικά (με αυτή τη σειρά ακμών): 8 3 Μπορούμε να εξετάσουμε τις ακμές με τέτοια σειρά ώστε η ακμή e να είναι η μικρότερη στην τομή (T u,v- T u )? ΝΑΙ: Αύξουσα σειρά βάρους w 1 w... w m Εάν η ακμή ΔΕΝ σχηματίζει κύκλο με τα τρέχοντα υπό-δεντρα του MST πρόσθεσέ την στο MST ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 016 - Ι. ΜΗΛΗΣ 14 - GRAPHS III - MSTs 17
Kruskal's MST algorithm Sort the edges s.t. w 1 w... w m \\ e i is the edge of weight w i X = { } \\ edges selected so far for i = 1 to m: if T u T v : X = X U {e i }; Πώς υλοποιείται αποτελεσματικά? ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 016 - Ι. ΜΗΛΗΣ 14 - GRAPHS III - MSTs 18
Union-Find A collection {S 1, S,..., S k } of DISJOINT dynamic sets : an element of some set S : the set which contains Operations MAKE-SET () Creates a new set S containing only element ; is not contained in any other eisting set UNION (,y) Unifies the disjoint sets containing elements and y (S and S y ) into a new set; Sets S and S y are destroyed FIND () Returns the set S (from a collection of disjoint sets) containing ; If, y S i, then FIND()=FIND(y) ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 016 - Ι. ΜΗΛΗΣ 14 - GRAPHS III - MSTs 19
Kruskal's MST Algorithm Sort the edges s.t. w 1 w... w m \\ e i is the edge of weight w i X ={} \\ edges selected so far for each u V: make-set(u) for i = 1 to m: e i = (u,v) if find(u) find(v): union(u,v) X = X {e i } UNION-FIND make-set(u): creates a set containing element u union(u,v): unifies the disjoint sets containing elements u and v find(u): returns the set (from a collection of disjoint sets) containing element u SET = SUB-TREE ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 016 - Ι. ΜΗΛΗΣ 14 - GRAPHS III - MSTs 0
Kruskal's MST Algorithm Sort the edges s.t. w 1 w... w m \\ e i is the edge of weight w i X ={} \\ edges selected so far for each u V: make-set(u) for i = 1 to m: e i = (u,v) if find(u) find(v): union(u,v) X = X {e i } Compleity Sorting: O( E log E ) that is O( E log V ) - why? Union-Find: V make-set, E find, V -1 union each one of them costs O(log V ) (net slides) and altogether O( E log V ) In total: O( E log V ) ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 016 - Ι. ΜΗΛΗΣ 14 - GRAPHS III - MSTs 1
Union-Find: Up-tree representation of sets Every set S i is represented by an up-tree The root of the tree is the representative of S i Every node has a pointer to its parent The root of the tree has a pointer to itself p[]: the parent of element e a d b c f g y h ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 016 - Ι. ΜΗΛΗΣ 14 - GRAPHS III - MSTs
Union-Find: 1 st approach MAKE-SET() p[]= FIND() while <>p[]: =p[] return O(1) O(n) - why? UNION(,y) a=find() b=find(y) p[a]=b // or p[b]=a O(n) d e f O(n) time per operation a b c g h ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 016 - Ι. ΜΗΛΗΣ 14 - GRAPHS III - MSTs 3
Union-Find: 1 st approach UNION(,y) is not efficient A tree may become a chain O(n) time per operation Eample a + b b + c c... z a b Can we do better? a b ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 016 - Ι. ΜΗΛΗΣ 14 - GRAPHS III - MSTs 4 a
Union-Find: Union by Rank Make the root of the larger tree the parent of the root of the smaller tree... Union by rank R[]: the rank of element a measure of the size of the tree rooted at R[] is initiated to 0 by MAKE-SET R[] is updated only by UNION if R[a]=R[b] then R[new root]=r[b]+1 In this case R[] is the height of the tree rooted at ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 016 - Ι. ΜΗΛΗΣ 14 - GRAPHS III - MSTs 5
Union-Find: Union by Rank MAKE-SET () p[]= R[]=0 FIND () while <>p[]: =p[] return UNION (,y) d f a=find () b=find (y) a b c if R[a]>R[b]: p[b]=a else: p[a]=b if R[a]=R[b]: R[b]=R[b]+1 e g h ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 016 - Ι. ΜΗΛΗΣ 14 - GRAPHS III - MSTs 6
Union-Find: Union by Rank R[] = height of the tree rooted at MAKE-SET () O(1) FIND () O(R[]) UNION (,y) O(R[]) O(R[]) time per operation Now, the net lemma holds: Lemma: Let size() = # of nodes of S R[].Then, size() (see net slide for the proof) Obviously, n size() and by the lemma size() R[] Hence, n R[], that is R[] log n and therefore: O(log n) time per operation Can we do better? YES, much better!!! ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 016 - Ι. ΜΗΛΗΣ 14 - GRAPHS III - MSTs 7
Lemma: Let size() = # of nodes of S. Then, size() R[] Proof: By induction on # of UNIONs Basis (no UNION): R[]=0, size()=1 : 1 0 = 1 Hypothesis: The lemma holds before a UNION(,y) operation Inductive step: Three cases in UNION(,y) 1) R[]<R[y] : R[ ] = R[y] Union-Find: Union by Rank '] [ ] [ ] [ ] [ ) ( ) ( ') ( R y R y R R y size size size ) R[]>R[y]: R[ ] = R[] 3) R[]=R[y]: R[ ] = R[y]+1 '] [ ] [ ] [ ] [ ) ( ) ( ') ( R R y R R y size size size ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 016 - Ι. ΜΗΛΗΣ 14 - GRAPHS III - MSTs 8 '] [ 1 ] [ ] [ ] [ ] [ ) ( ) ( ) ' ( R y R y R y R R y size size size
Union-Find: Path compression FIND(): traces the path, a 1, a,..., a k, r from to the root r of S AND also makes all the parent pointers of, a 1, a,..., a k point to r directly r r FIND() Two-pass FIND() FIND () if <>p[]: p[]=find(p[]) return p[] ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 016 - Ι. ΜΗΛΗΣ 14 - GRAPHS III - MSTs 9
Union-Find: Path compression Theorem : If union by rank and path compression are used then the amortized compleity per operation is O(log*n) log*n = min{i0 : log (i) n 1} Iterated logarithm for n=1 (= 0 ) : log*n=1 for n= (= 1 ) : log*n=1 for n=3,4 (= ) : log*n= for n=5,6,,16 (= 4 ): log*n=3 for n=17,18,,65536 (= 16 ) : log*n=4 for n=65537,65538,, 65536 (= 64K ): log*n=5 for all practical purposes, log*n 5 ~ O(1) ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 016 - Ι. ΜΗΛΗΣ 14 - GRAPHS III - MSTs 30