ηάιεμε 4: ιάρηζηα ελλεηνξηθά έλδξα Αιγόξηζκνο Kruskal Σηελ ελόηεηα απηή ζα κειεηεζνύλ ηα εμήο επηκέξνπο ζέκαηα: Ο αλγόριθμος ηοσ Kruskal για εύρεζη ζε γράθοσς Παράδειγμα κηέλεζης ηδάζθσλ: εµήηξεο ετλαιηπνύξ ΠΛ 35 οκές εδοκέλωλ θαη Αιγόρηζκοη γηα Ζι. Μετ. θαη Μετ. Υποι. 4-
Ο αιγόξηζκνο ηνπ Kruskal Αθόκα έλαο άπιεζηνο (greedy) αιγόξηζκνο πνπ ππνινγίδεη ην ιάρηζην ελλεηνξηθό έλδξν (). λώ ν αιγόξηζκνο ηνπ Prim επεμεξγάδεηαη κηα-κηα ηηο κορσφέρ, ν αιγόξηζκνο ηνπ Kruskal επεμεξγάδεηαη κηα-κηα ηηο ακμές ηνπ γξάθνπ. πίζεο, ελώ ζε θάζε βήκα ηνπ αιγόξηζκνπ ηνπ Prim νη επηιεγκέλεο αθκέο ζρεκαηίδνπλ έλα δένδπο, ζηελ πεξίπησζε ηνπ αιγόξηζκνπ Kruskal, ζρεκαηίδνπλ έλα δάζορ (έλα ζύλνιν από δέλδξα). Κενηπική ιδέα. Αξρηθά ην δάζνο Τ είλαη άδεην. πεμεξγαδόκαζηε κηα-κηα ηηο αθκέο, ζε αύξοςζα ζειπά βάποςρ. λ ε εηζαγσγή ηεο e ζην Τ δεν πποκαλεί κύκλο, ηόηε πξνζζέηνπκε ηελ e ζην Τ, δειαδή Τ := Τ {e}. ΠΛ 35 οκές εδοκέλωλ θαη Αιγόρηζκοη γηα Ζι. Μετ. θαη Μετ. Υποι. 4-
Αξρηθή Καηάζηαζε Παξάδεηγκα θηέιεζεο ξάθνο G Μεηά από επηινγή ηεο πξώηεο αθκήο (Β,) 6 Β Β -E = - = Β- = - = Β- = 5 - = 6 Α-Β = 7 Α- = ΠΛ 35 οκές εδοκέλωλ θαη Αιγόρηζκοη γηα Ζι. Μετ. θαη Μετ. Υποι. 4-3
Παξάδεηγκα θηέιεζεο Μεηά από επηινγή ηεο δεύηεπηρ αθκήο (,) Μεηά από επηινγή ηεο ηπίηηρ αθκήο (Β,) Β- = - = Β- = 5 - = 6 Α-Β = 7 ΠΛ 35 οκές εδοκέλωλ θαη Αιγόρηζκοη γηα Ζι. Μετ. θαη Μετ. Υποι. 6 -E = - = Α- = 4-4
Παξάδεηγκα θηέιεζεο Μεηά από επιλογή ηηρ ηέηαπηηρ ακμήρ (Β,) 5 πάθορ G 6 Μεηά από επιλογή ηηρ πέμπηηρ ακμήρ (Α,Β) 7 5 ΠΛ 35 οκές εδοκέλωλ θαη Αιγόρηζκοη γηα Ζι. Μετ. θαη Μετ. Υποι. -E = - = Β- = - = Β- = 5 - = 6 Α-Β = 7 Α- = (Κύκλορ) (Κύκλορ) Τέλορ 4-5
Απνδνηηθή μάιεηςε Κύθισλ H ηαμηλόκεζε ησλ Άθκσλ είλαη απιή, δειαδή ηαμηλνκνύκε κηα θνξά όιεο ηηο αθκέο κε θάπνην αιγόξηζκν ηαμηλόκεζεο. Βαζικό Ππόβλημα: Τν πξόβιεκα πνπ απνκέλεη είλαη πσο ζα βξίζθνπκε απνδνηηθά εάλ κηα αθκή κπνξεί λα δεκηνπξγήζεη θύθιν Λύζη Θα ρξεζηκνπνηήζνπκε έλα πίλαθα [n] (TreeID) ν νπνίνο καο ππνδεηθλύεη γηα θάζε θνξπθή v ζε πην δέλδξν αλήθεη ε v. Π.σ. εάν ζέισ λα πποζθέζω κηα αθκή (u,v) θαη u & v αλήθνπλ ζην ίδην δέλδξν ([u]==τid[v]), ηόηε απηή ε αθκή ζα δεκηνπξγήζεη θύθιν. πομένωρ δε θα πποζθέζω ηην (u,v) w u v To (u,v) θα δημιοςπγήζει κύκλο γιαηί και ηα δςο ανήκοςν ζηο ίδιο (i.e., ) To (u,w) δεν θα δημιοςπγήζει κύκλο γιαηί οι δςο κόμβο ανήκοςν ζε διαθοπεηικά ΤΙD (i.e., και ) ΠΛ 35 οκές εδοκέλωλ θαη Αιγόρηζκοη γηα Ζι. Μετ. θαη Μετ. Υποι. 4-6
Υινπνίεζε ηνπ Αιγνξίζκνπ Kruskal Kruskal(graph G(V,E)){ Tree = {}; // Το : Ένα σύνολο ακμών (αρχικά κενό) [ V ] = {} // Πίλαθας ποσ θραηά ηο TreeID ηοσ θάζε θόκβοσ Count = ; // Μεηπηηήρ πος κπαηά από πόζερ κοπςθέρ πέπαζα sortedges(e); // Ταξινόμηζη Άκμων ζε σπόνο O( E.log E ) // ημιοςπγούμε ένα δάζορ από δένδπα μεγέθοςρ for (i=; i< V ; i++) // τρόλο Θ( V ) [i] = i; for (i=; i< E ; i++) { // τρόλο O( E ) // ανάκηηζη επόμενηρ (μικπόηεπηρ) ακμήρ (u,v) = nextedge(); // τρόλο Θ() If ([u]!= [v]) { Tree = Tree {(u,v)}; // Αλ αλήθοσλ ζε δηαθορεηηθά δέλδρα // Προζζήθε Αθκής } } // Μεηρούκε ποηος από ηοσς u,v εκθαλίδεηαη περηζζόηερο ζηο // θαη επηζηρέθοσκε ηολ κεγαιύηερο ζαλ TreeID x x = occurence(, u, v); // τρόλο O( V ) // Αλάζεζε TreeID x ζε όιοσς ποσ έτοσλ [u] ή [v] count = merge([u],[v],x); } if (count == V ) break; Σςνολικόρ σπόνορ: O( E.log E + V + E * V ) ΠΛ 35 οκές εδοκέλωλ θαη Αιγόρηζκοη γηα Ζι. Μετ. θαη Μετ. Υποι. 3 4 5 V 4-7
θηέιεζε ηεο Υινπνίεζεο Kruskal 6 3 4 5 { -E =, - =, Β- =, - =, Β- = 5, - = 6, Α-Β = 7, Α- = }. Nextedge => (,E). []!= [E]? => YES, ποκέλως Tree = {} {(Β,)}; 3. Merge([],[E],); 3 5 4. Nextedge => (,) 5. []!= [E]? => YES, ποκέλως Tree={(Β,)} {(,)}; 6. Merge([],[E],); 5 ΠΛ 35 οκές εδοκέλωλ θαη Αιγόρηζκοη γηα Ζι. Μετ. θαη Μετ. Υποι. 4-8
θηέιεζε ηεο Υινπνίεζεο Kruskal 6 5 { -E =, - =, Β- =, - =, Β- = 5, - = 6, Α-Β = 7, Α- = } 7. Nextedge => (,) 8. []!= []? => YES,πομένως Tree = {(Β,),(,)} {(Β,)};. Merge([],[],);. Nextedge => (,). []!= []? => ΝΟ, πομένως δεν χρηζιμοποιούμε ηο (,); ΠΛ 35 οκές εδοκέλωλ θαη Αιγόρηζκοη γηα Ζι. Μετ. θαη Μετ. Υποι. 4-
θηέιεζε ηεο Υινπνίεζεο Kruskal 6 { -E =, - =, Β- =, - =, Β- = 5, - = 6, Α-Β = 7, Α- = }. Nextedge => (,) 3. []!=[]? => YES,πομένως Tree = {(Β,),(,), (Β,)} {(Β,)}; 4. Merge([],[],); 5. Nextedge => (,) 6. []!= []? => ΝΟ, πομένως δεν χρηζιμοποιούμε ηο (,); 7. Nextedge => (Α,Β) 8. [Α]!= [Β]? => YES, πομένως Tree = {(Β,),(,), (Β,), (Β,)} {(Α,Β)}; δώ βρήθακε V vertices, εποκέλως δηαθόπηοσκε ηελ αλαδήηεζε. ΠΛ 35 TO οκές είλαη εδοκέλωλ ηο Τree θαη = {(Β,),(,), Αιγόρηζκοη γηα (Β,), Ζι. Μετ. (Β,),(Α,Β)}; θαη Μετ. Υποι. 4-