25
1 İçerik Ön Tanımlar Yol, Cevrim(çember) En Kısa Yol Problemi Dijktra’nın Algoritması Bellman ve Ford Algoritması

Ders İçeriği · PPT file · Web view · 2012-03-05Bunlardan en ünlüleri Dijkstra Ağırlıklı ve yönlü graflar için geliştirilmiştir. Graf üzerindeki kenarların ağırlıkları

  • Upload
    lammien

  • View
    228

  • Download
    4

Embed Size (px)

Citation preview

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

81

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

u11v5 Güncelle(u, v) 0

s 3u

8v5

Güncelleme - Kaba Kod

1212

0s 3

u11v5 Güncelle(u, v) 0

s 3u

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

2B

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

2B

C

3

-2

A

4B

C

5

0Her kenara

2 ekle

20

Negatif Maliyetli Çember• Eğer graf negatif maliyetli çember içeriyorsa,

en az maliyetli yol tanımlanamaz.

A2

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. PredA 0 -B ∞ -C ∞ -D ∞ -

AB

DC

(C, D) (A, B) (A, C) (B, C) (B, D)

4 A4

3 A3

2 B2

İlk Yineleme

∞ E

E ∞ -

-3

-1

(B, E)(B, E)

(D, E)(D, E)

6 6 B1 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 PredA 0 -B 4 AC 2 BD 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 PredA 0 -B 4 AC 2 BD 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

312

AB

DC

1 E-3

-1

Düğüm

Ma PredA 0 -B 4 AC 2 BD 3 CE 1 B

C

D

1

-3

4

-2

1

E