İçerik

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

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 Presentation

Transcript of İçerik

Page 1: İçerik

1

İçerik• Ön Tanımlar

– Yol, Cevrim(çember)

• En Kısa Yol Problemi– Dijktra’nın Algoritması– Bellman ve Ford Algoritması

Page 2: İçerik

Yol

2

A B

D

E

C

Page 3: İçerik

Ç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

Page 4: İçerik

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

Page 5: İçerik

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

Page 6: İçerik

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ıç

Page 7: İçerik

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

Page 8: İçerik

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?

Page 9: İçerik

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

Page 10: İçerik

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

Page 11: İçerik

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

Page 12: İçerik

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.

} }

Page 13: İçerik

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

Page 14: İçerik

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

Page 15: İçerik

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

Page 16: İçerik

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

Page 17: İçerik

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.

Page 18: İçerik

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?

Page 19: İçerik

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

Page 20: İçerik

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?

Page 21: İçerik

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

Page 22: İçerik

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

Page 23: İçerik

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

Page 24: İçerik

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)

Page 25: İçerik

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