Algoritmalar II Ders 15 En Küçük Örten Ağaçlar
ÖN KÜÇÜK ÖRTEN AĞAÇLAR
Örten ağaç A B A B C C E D E D F F G=(V, E) bağlantılı çizgesinin örten ağacı Bir ağaçtır V kümesinin tüm elemanları bu ağacın düğümleridir G örten ağaç Örten ağaçta |V| - 1 kiriş olur. A B A B C C E D E D F F
Örten Ağaçlar Bir çizgenin çok sayida örten ağaci olabilir. Çizge G G çizgesinin bazı örten ağaçları
Tam Çizge 16 tane örten ağaç var
Örten ağaçlarin toplam sayisi n köşeli bir tam çizgenin n (n-2) sayıda örten ağaçı var (Cayley formülü) 10098 = 10196 Bir yılda 315576*106 saniye var. Bir nanosaniye =(10-9) saniye. Bir yılda 315576*1015 < 1021 nanosaniye var. 100 köşeli çizgenin tüm örten ağaçlarını 10175 yıldan daha uzun sürede bulabiliriz.(Bir işlemi bir nanosaniyede yapabilirsek)
En küçük örten ağaç Giriş: Yönsüz bağlantılı çizge G = (V, E) and ağırlık fonksiyonu w : E→R, Çıkış: En küçük örten ağaç T : tüm köşeleri birleştiren ve değeri en küçük olan ağaç Açgözlü algoritmalar Genel en küçük ağaç algoritması Kruskal algoritması Prim algoritması
AÇGÖZLÜ YAKLAŞİM İÇİN TEMEL Aşağıdaki teorem doğrudur: Teorem. T ağacı G = (V, E) çizgesinin en küçük örten ağacı, S V olsun ve (u, v) ∈ E kirişi S kümesindeki köşeleri S – A kümesindeki köşelere birleştiren en küçük ağırlıklı kiriş olsun. Bu durumda (u, v) ∈ T.
BÜYÜYEN EN KÜÇÜK ÖRTEN AĞAÇ Genel algoritma Her adımda en küçük ağaç bir kiriş büyüyerek oluşturulur A kümesi kirişler kümesi olsun ve bu küme bir en küçük örten ağacın kirişlerinin altkümesi olsun Her adımda A kümesinin yukarıdaki özelliğini bozmayacak bir (u, v) kirişi buluyoruz ve A kümesine ekliyoruz: A {(u, v)} kümesi de bir en küçük örten ağacın kirişler kümesinin altkümesidir (u, v) kirişine güvenli kiriş denir.
GENERIC-MST
GÜVENLİ KİRİŞ NASİL BULUNUR? A kümesi bir en küçük örten ağacın kirişler kümesi olan E nin altkümesi, (S, V-S) ise G nin A ya göre bir kesiti olsun. (Yani A daki kirişlerin her iki ucu ya S kümesindedir, ya da V-S kümesindedir.) (u, v) kirişi G nin S kümesindeki köşeleri V-S kümesindeki köşelere birleştiren en küçük ağırlıklı kirişi olsun. Bu durumda (u, v) kirişi A için güvenli kiriş olur.
Örnek A={(a,b}, (c, i}, (h, g}, {g, f}} S={a, b, c, i, e}; V-S = {h, g, f, d} A ya göre oluşturulabilecek kesitlerden biri (c, f) S den V-S e olan en az ağırlıklı kiriş, yani güvenli kirişdir
Kruskal Algoritmasi Kiriş tabanlı algoritmadır Açgözlü strateji: Kalan kirişler arasında ağırlığı en az olan ve artık seçilmiş kirişlerle döngü oluşturmayacak kirişi seç |V|-1 defa tekrar et
Kruskal Algoritmasi Giriş: Ağırlıklı G = (V, E) çizgesi,|V| = n ÇIKIŞ: G nin örten ağacı T Tüm köşeleri içerir, n-1 kirişi var Kirişlerinin toplam ağırlığı en azdır Algoritma: Boş T kümesinden başla, Her adımda kirişleri artan ağırlık sırasıyla ekle Yeni kirişi kabul edilme şartı: eklenen kiriş bir ağaç kirişi olmalıdır (yani bu kiriş T de döngü oluşturmamalıldır) Bu işleme T de n-1 kiriş olana kadar devam edilir
Kruskal Algoritmasi MST-Kruskal(G,w) 1 A ¬ Æ 2 for each vertex v Î V[G] do 3 Make-Set(v) //creates set containing v (for initialization) 4 sort the edges of E 5 for each (u,v)ÎE do 6 if Find-Set(u) ¹ Find-Set(v) then // different component 7 A ¬ A È {(u,v)} 8 Union(Set(u),Set(v)) // merge 9 return A
Kruskal Algoritmasi
Kruskal’s Algorithm
Kruskal’s Algorithm
Kruskal’s Algorithm
Kruskal's Algorithm // takes O(E) MST-Kruskal(G,w) 1 A ¬ Æ 2 for each vertex v Î V[G] do // takes O(V) 3 Make-Set(v) 4 sort the edges of E // takes O(E lg E) // takes O(E) 5 for each (u,v)ÎE, in nondecreasing of weight do 6 if Find-Set(u) ¹ Find-Set(v) then 7 A ¬ A È {(u,v)} 8 Union(Set(u),Set(v)) 9 return A