İçerik
DESCRIPTION
İçerik. Ön Tanımlar Yol, Cevrim(çember) En Kısa Yol Problemi Dijktra’nın Algoritması Bellman ve Ford Algoritması. Yol. B. A. E. D. C. Çevrim (Çember). Çevrim başlangıç ve bitişi aynı olan yoldur. y = {A, E, B, C, D, A} y = {B, A, E, B} y = {D, E , B, A, E , C, D } - PowerPoint PPT PresentationTRANSCRIPT
1
İçerik• Ön Tanımlar
– Yol, Cevrim(çember)
• En Kısa Yol Problemi– Dijktra’nın Algoritması– Bellman ve Ford Algoritması
Yol
2
A B
D
E
C
Çevrim (Çember)• Çevrim başlangıç ve bitişi aynı olan yoldur.
– y = {A, E, B, C, D, A}– y = {B, A, E, B}– y = {D, E, B, A, E, C, D}
• Basit çevrim başlangıç düğümü hariç diğer düğümlerin tekrar etmediği yoldur.– y = {A, E, B, C, D, A}– y = {B, A, E, B}
3
A B
D
E
C
Yol Uzunluğu ve Yol Maliyeti• Yol Uzunluğu: Yoldaki kenar sayısı• Yol Maliyeti: Her kenardaki
ağırlıkların/maliyetin toplamı.– Not: ağırlıksız graflarda yol uzunluğu yol
maliyetine eşittir.
4
A B
D
E
C
2
3 6
8
1
5
74
• y = {B, A, E, C, D}• Uzunluk(y) = 4• Maliyet(y) =
2+3+1+5=11
En Kısa Yol Problemi• G = (D, K) grafı verilsin ve s başlangıç
düğümünden V düğümüne giden en az maliyetli yol bulma.
• Farklı varyasyonlar mevcut– Ağırlıklı ve ağırlıksız graflar– Sadece pozitif ağırlık veya negatif ağırlığın
da olması.
5
Ağırlıksız En Kısa Yol Problemi
• Problem: G = (D, K) ağırlıksız grafında s başlangıç düğümü veriliyor ve s’den diğer düğümlere giden en kısa yol nasıl bulunur.
• C’den diğer düğümlere giden en kısa yolu bulun? 6
A B
D
GC
E
F H
Başlangıç
BFS Tabanlı Çözüm• S’den başla BFS algoritmasını uygula
(çevrim graflarda da çalışır.)
7
7
A B
D
GC
E
F H
Source
A D E
B G
F
H
C
Ağırlıklı Graflarda En Kısa Yol Problemi
• BFS algoritması bu graf içinde çalışır mı?– Hayır!
8
A B
D
C
E
39
1
2
1
28
3
• C den A’ya en kısa yol:– C->A (uzunluk: 1, maliyet: 9)– BFS ile hesaplandı
• C den A’ya en az maliyetli yol:– C->E->D->A (uzunluk: 3, maliyet:
8)– Peki nasıl hesaplayacağız?
Algoritmalar• İki düğüm arasında en az maliyetle
gidilebilen bir yolun belirlenmesi için birçok algoritma geliştirilmiştir. Bunlardan en ünlüleri– Dijkstra
• Ağırlıklı ve yönlü graflar için geliştirilmiştir.• Graf üzerindeki kenarların ağırlıkları 0 veya
sıfırdan büyük sayılar olmalıdır.• Negatif ağırlıklar için çalışmaz.
– Bellman ve Ford• Negatif ağırlıklı graflar için geliştirilmiştir.
– Floyd
9
Dijkstra’nın Algoritması• Başlangıç olarak sadece başlangıç
düğümünün en kısa yolu bilinir. (0 dir.)
• Tüm düğümlerin maliyeti bilinene kadar devam et.1. O anki bilinen düğümler içerisinden en iyi
düğümü şeç. (en az maliyetli düğümü seç, daha sonra bu düğümü bilinen düğümler kümesine ekle)
2. Seçilen düğümün komşularının maliyetlerini güncelle.
10
Güncelleme• Adım-1 de seçilen düğüm u olsun.• u düğümünün komşularının maliyetini
güncelleme işlemi aşağıdaki şekilde yapılır.– s’den v’ye gitmek için iki yol vardır.– Kırmızı yol izlenebilir. Maliyet 11.– Veya mavi yol izlenebilir. Önce s’den u’ya 3
maliyeti ile gidilir. Daha sonra (u, v) kenarı üzerinden 8 maliyetle v’ye ulaşılır.
1111
0s 3
u
11v5 Güncelle(u, v)
0s 3
u
8v5
Güncelleme - Kaba Kod
1212
0s 3
u
11v5 Güncelle(u, v)
0s 3
u
8v5
Guncelle(u, v){if (maliyet[u] + w(u, v) < maliyet[v]){ // U üzerinden yol daha kısa ise
maliyet[v] = maliyet[u] + w(u, v); // Evet! Güncellepred[v] = u; // u’dan geldiğimizi kaydet.
} }
0
13
Dijkstra’nın Algoritması
∞ ∞
∞
0
∞
39
1
2
1
28
3
A B
C
D E8 2
9 1. O anki en iyi düğümü seç – C2. Bilinen düğümler kümesine
ekle3. Seçilen düğümün tüm
komşularının maliyetini güncelle.
1. Komşu A: 0 + 9 < ∞ maliyet(A) = 92. Komşu D: 0 + 8 < ∞ maliyet(D) = 83. Komşu E: 0 + 2 < ∞ maliyet(E) = 2
14
Dijkstra’nın Algoritması
9 ∞
8
0
2
39
1
2
1
28
3
A B
C
D E25
1. O anki en iyi düğümü seç – E2. Bilinen düğümler kümesine
ekle3. Seçilen düğümün tüm
komşularının maliyetini güncelle.
1. Komşu D: 2 + 3 = 5 < 8 maliyet(D) = 5
15
Dijkstra’nın Algoritması
9 ∞
5
0
2
39
1
2
1
28
3
A B
C
D E25
8 1. O anki en iyi düğümü seç – D2. Bilinen düğümler kümesine
ekle3. Seçilen düğümün tüm
komşularının maliyetini güncelle.
1. Komşu A: 5 + 3 = 8 < 9 maliyet(A) = 8
16
Dijkstra’nın Algoritması
8 ∞
5
0
2
39
1
2
1
28
3
A B
C
D E
8 10
1. O anki en iyi düğümü seç – A2. Bilinen düğümler kümesine
ekle3. Seçilen düğümün tüm
komşularının maliyetini güncelle.
1. Komşu B: 8 + 2 = 10 < ∞ maliyet(B) = 10
17
Dijkstra’nın Algoritması
8 10
5
0
2
39
1
2
1
28
3
A B
C
D E
10
1. O anki en iyi düğümü seç – B2. Bilinen düğümler kümesine
ekle3. Seçilen düğümün tüm
komşularının maliyetini güncelle.
Negatif Ağırlıklı Dijkstra• Eğer kenarların ağırlıkları negatif ise
Dijkstra algoritması en az maliyetli yolu bulmada başarısız oluyor.
18
A
2
B
C
3
-2
• A’dan C’ye en az maliyetli yol− Dijkstra : A->C, maliyet: 2− Gerçek yol A->B->C, maliyet: 1
• Her kenara pozitif sabit eklersek ne olur?
Negatif Ağırlıklı Dijkstra• Her kenara pozitif sabit eklersek ne olur?
19
• A’dan C’ye en az maliyetli yol • Dijkstra: A->C• Gerçek Yol: A->B->C
A
2
B
C
3
-2
A
4
B
C
5
0Her kenara
2 ekle
20
Negatif Maliyetli Çember• Eğer graf negatif maliyetli çember içeriyorsa,
en az maliyetli yol tanımlanamaz.
A
2
B
C
1
-8
D4
• A’dan D’ye en az maliyetli yol nedir?• Veya B’den C’ye?
Bellman-Ford Algoritması• Ana mantık:
– Her düğüm için bir uzaklık tahmini oluşturulur.– Başlangıç olarak maliyet(s)=0 diğer düğümler
için maliyet(u)= ∞ olarak atanır.– En az maliyetli yol hesaplanana kadar tüm
kenarlar üzerinden güncelleme yapılır.
• Algoritma ayrıca grafın negatif maliyetli kenarının olup olmadığını da bulur.
• Dijkstra’nın algoritmasına göre daha yavaş çalışır.
21
22
Bellman-Ford Alg: Örnek
0
-2
∞
∞
4
3
∞1
(C, D) (A, B) (A, C) (B, C)
2
(B, D)
Düğüm
Ma. Pred
A 0 -
B ∞ -
C ∞ -
D ∞ -
AB
DC
(C, D) (A, B) (A, C) (B, C) (B, D)
4 A
4
3 A
3
2 B
2
İlk Yineleme
∞ E
E ∞ -
-3
-1
(B, E)(B, E)
(D, E)(D, E)
6 6 B
1 B
1
23
Bellman-Ford Alg: Örnek
0
-2
4
2
4
3
61
(C, D) (A, B) (A, C) (B, C)
2
(B, D)
Düğüm
Ma Pred
A 0 -
B 4 A
C 2 B
D 6 B
AB
DC
(C, D) (A, B) (A, C) (B, C) (B, D)
İkinci Yineleme
1 E
E 1 B
-3
-1
(B, E)(B, E)
(D, E)(D, E)
3 3 C
24
Bellman-Ford Alg: Örnek
0
-2
4
2
4
3
31
(C, D) (A, B) (A, C) (B, C)
2
(B, D)
Düğüm
Ma Pred
A 0 -
B 4 A
C 2 B
D 3 C
AB
DC
(C, D) (A, B) (A, C) (B, C) (B, D)
Üçüncü & Dördüncü Yineleme
1 E
E 1 B
-3
-1
(B, E)(B, E)
(D, E)(D, E)
25
Bellman-Ford Alg: Sonuç
0A
4B
2
3
0
-2
4
2
4
3
31
2
AB
DC
1 E
-3
-1
Düğüm
Ma Pred
A 0 -
B 4 A
C 2 B
D 3 C
E 1 B
C
D
1
-3
4
-2
1
E