En Küçük Yol Ağacı

Download Report

Transcript En Küçük Yol Ağacı

En Küçük Yol Ağacı
(Minimum Spanning Tree)
•
Yol ağacı, bir graf üzerinde tüm düğümleri
kapsayan ağaç şeklinde bir yoldur.
–
•
Ağaç özelliği olduğu için kapalı çevrim(çember)
içermez.
Bir graf üzerinde birden çok yol ağacı olabilir.
En az maliyetli olan en küçük yol ağacı (minimum
spanning tree) olarak adlandırılır.
1
MSP - Örnek
B
2
C
B
3
2
C
3
3
A
7
9
D
B
E
6
2
3
A
D
15
C
B
3
7
E
2
C
3
3
A
A
9
14
D
6
E
20
D
6
E
2
MST Hesaplama – Ağırlıksız Graf
• Graf ağırlıksızsa veya tüm kenarların
ağırlıkları eşit ise MST nasıl bulunur?
– BSF veya DSF çalıştırın oluşan ağaç MST’dir
A
A
B
D
DFS(A)
E
C
B
C
D
A
E
BFS(A)
B
C
E
D
3
Algoritmalar
• En küçük yol ağacını belirlemek için birçok
algoritma geliştirilmiştir.
– Kruskal’ın Algoritması: Daha az maliyetli
kenarları tek tek değerlendirerek yol ağacını
bulmaya çalışır. Ara işlemler birden çok ağaç
oluşturabilir.
– Prim’in Algoritması: En az maliyetli kenardan
başlayıp onun uçlarından en az maliyetle
genişleyecek kenarın seçilmesine dayanır. Bir
tane ağaç oluşur.
– Sollin’in Algoritması: Doğrudan paralel
programlamaya yatkındır. Aynı anda birden çok
ağaçla başlanır ve ilerleyen adımlarda ağaçlar
birleşerek tek bir yol ağacına dönüşür.
4
Greedy Yaklaşımı/Yöntemi
• Dolaşma yapılırken bir sonraki düğümü
belirlemek için kullanılan bir karar
verme/seçme yöntemidir.
• O andaki seçenekler içerisinden en iyi
olarak gözükeni seçer.
• Bölgesel/yerel değerlendirmeler yapar.
• Yerel optimum daima global optimum
anlamına gelmez dolayısıyla en iyi sonuca
götürmeyebilir.
• Fakat bazı durumlarda en iyi sonuca
götürür. (MST, en kısa yol alg. , Huffman
coding)
5
Kruskal’ın Algoritması
• Graf üzerindeki düğümler, aralarında
bağlantı olmayan N tane bağımsız küme gibi
düşünülür.
• Daha sonra bu kümeler tek tek maliyeti en
az olan kenarlarla birleştirilir (çevrim
oluşturmayacak şekilde ).
• Düğümler arasında bağlantı olan tek bir
küme oluşturulmaya çalışılır.
• Küme birleştirme işleminde en az maliyetli
olan kenardan başlanılır; daha sonra kalan
kenarlar arasından en az maliyetli olanlar
seçilir.
6
Kruskal’ın Algoritması – Kaba Kod
7
Kruskal’ın Algoritması: Örnek
b
4
a
8
11
8
c
2
7
h
i
7
d
4
6
1
g
2
9
14
f
e
10
Sıralı kenar listesi
(h, g)
(i, c)
(g, f)
(c, d)
(a, h)
(b, c)
(a, b)
(d, e)
(c, f)
(e, f)
(i, g)
(i, h)
(b, h)
(d, f)
8
Prim’in Algoritması
• En küçük yol ağacını belirlemede kullanılan
diğer bir algoritmadır.
– Greedy algoritmalarından biridir.
• Kruskal’ın algoritmasından tek farkı bir
sonraki kenarı nasıl seçtiğidir.
9
Prim’in Algoritması
• Adım-1: Başlangıçta, herhangi bir noktayı
ağacı oluşturmaya başlamak için seç.
• Adım-2: Oluşturulan ağaca eklemek için, şu
ana kadar oluşturulmuş ağaç üzerinden
erişilebilen ve daha önceden ağaca
katılmamış olan en küçük ağırlıklı kenarı
seç.
• Adım-3: Eğer bu kenarın ağaca katılması,
bir çember oluşmasına sebep olmuyorsa,
ağaca ekle.
• Adım-4: Ağaçtaki kenar sayısı (N-1)'e
ulaşana kadar ikinci adıma geri dön.
10
Prim’in Algoritması
12
12
10
10
6
r
6
r
7
7
11
4
u
u
5
5
Başlangıçtaki Ağaç (A)
3
9
“u” eklendikten sonra ağaç
11
Prim’in Algoritması - Örnek
7
8
4
2
11
8
4
6
7
1
9
14
10
2
12