Professional Documents
Culture Documents
BM203 Ders12 Graflar
BM203 Ders12 Graflar
Algoritmalar
Ders 9
Çizge Kuramı (Graf Teorisi)
• Çizge teorisi temel olarak bir problemin kenar (edge) ve
düğümler (node) ile modellenmesi ve bu modelin bir
çizge şeklinde gösterilmesi ilkesine dayanmaktadır.
• Çizge teorisinde tanımlı olan bazı özellikler bu modelin
çözümüne ve dolayısıyla gerçek problemin çözümüne
yardımcı olmaktadırlar.
• Yani çizge teorisinin işe yaraması için öncelikle gerçek
dünyadan bir problem çizge olarak modellenir, bu model
çözülür ve daha sonra gerçek dünyaya uygulanır.
Çizgenin Tanımı
• Graf, matematiksel anlamda, düğümlerden ve bu
düğümler arasındaki ilişkiyi gösteren kenarlardan oluşan
bir kümedir.
• Bağlantılı listeler ve ağaçlar grafların özel örneklerindendir.
• Bir G grafı D ile gösterilen düğümlerden (node veya
vertex) ve K ile gösterilen kenarlardan (Edge) oluşur.
• Her kenar iki düğümü birleştirir.
B C
A F
D E
4
Uygulama Alanları
• Elektronik devreler • Bilgisayar Ağları
• Baskı devre kartları • Lokal alan ağları
(PCB) • İnternet
• Entegre devreler • Veritabanları
• Ulaşım Ağları • Entity-relationship
• Otoyol Ağı diyagram
• Havayolu Ağı
5
Graflar – Kenar Türleri
• Yönlendirilmiş Kenar (Directed • Yönlendirilmiş Graf (Directed
Edge) Graphs)
• Sıralı kenar çiftleri ile ifade edilir. • Bütün kenarları yönlendirilmiş
• (u, v) ile (v, u) aynı değildir. graftır.
• İlk kenar orijin ikinci kenar ise • Digraph şeklinde de ifade edilirler.
hedef olarak adlandırılır. • Yönlendirilmemiş Graf
• Yönlendirilmemiş Kenar (Undirected Graphs)
(Undirected Edge) • Hiçbir kenarı yönlendirilmemiş
• Sırasız kenar çiftleri ile ifade edilir. graftır.
• (u, v) ile (v, u) aynı şeyi ifade ederler.
6
• Komşu(Adjacent): Eğer (u, v) ∈ K ise u ve v
düğümleri komşudur.
• (A, B) komşudur.
• (B, D), (C, F) komşu değildir.
B C
A F
D E
7
• Graf kenarları üzerinde • Ağırlık uygulamadan
ağırlıkları olabilir. Eğer uygulamaya değişir.
kenarlar üzerinde • Şehirler arasındaki
uzaklık.
ağırlıklar varsa bu tür
graflara • Routerler arası bant
genişliği
ağırlıklı/maliyetli graf
(Weighted Graphs)
denir.
8
Graf Gösterimi
• Zaman ve yer karmaşıklığı aşağıdaki her iki ifade ile
de ölçülür.
• Düğüm sayısı = |D| = n
• Kenar sayısı = |K| = k
• Graf gösterimi için iki farklı yol vardır.
• Komşuluk matrisi
• Komşuluk listesi
9
Komşuluk Matrisi Gösterimi
A B C D E F
B C A 0 1 0 1 0 0
B 0 0 1 0 0 0
A F
C 0 0 0 1 1 0
D 0 0 0 0 1 0
D E
E 0 0 0 0 0 0
F 0 0 0 0 0 0
10
Komşuluk Matrisi Gösterimi
• Komşuluk Matrisi Gösterimi (Ağırlıklı Graf):
ağırlık(u, v) (u, v) K’nın içindeyse
M(u, v) =
∞ diğer
A B C D E F
20
B C A ∞ 10 ∞ 5 ∞ ∞
10
B ∞ ∞ 20 ∞ ∞ ∞
30
A 50 F C ∞ ∞ ∞ 30 50 ∞
5
15 D ∞ ∞ ∞ ∞ 15 ∞
D E
E ∞ ∞ ∞ ∞ ∞ ∞
F ∞ ∞ ∞ ∞ ∞ ∞
11
Komşuluk Listesi Gösterimi
• Komşuluk Listesi: B D
A
B A C
B C
C B D E
D A C E
A F
E C D
D E F
12
Komşuluk Listesi Gösterimi
• Komşuluk Listesi (Yönlendirilmiş Graflar)
B C A B D
B C
A F
C D E
D E
D E
13
Graf Üzerinde Dolaşma
• Graf üzerinde dolaşma grafın düğümleri ve kenarları
üzerinde istenen bir işi yapacak veya bir problemi
çözecek biçimde hareket etmektir.
• Graf üzerinde dolaşma yapan birçok yaklaşım
yöntemi vardır. En önemli iki tanesi aşağıda
listelenmiştir.
• BFS (Breadth First Search) Yöntemi
• DFS (Depth First Search ) Yöntemi
14
Graf Üzerinde Dolaşma
• Breath-First Search (BFS):
• Başlangıç düğümünden başla ve tüm komşuları ziyaret et.
• Daha sonra komşunun komşularını ziyaret et.
• Başlangıç düğümünden başlayıp dışa doğru dalga gibi.
• Depth-First Search (DFS)
• Bir düğümden başla düğümün bir kenarında o kenar üzerinde gidilebilecek
en uzak düğüme kadar sürdür.
• Geri gel ve diğer kenarı dene
• Tüm düğümler gezilene kadar devam et.
15
Breath-First Search (BFS)
17
Depth-First Search (DFS)
19
DFS - Örnek
DFS(a) ağacı
b a f
a
c g b f
c g
d e
d e
20
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.
21
MSP - Örnek
2 2
B C B C
3 3
A
3 7 3
A 7
9
D E D E
6 15
2 2
B C B C
3 3
A
3
A
9
14 D
6
E
20 D E
6 22
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
A
DFS(A) BFS(A)
B C B E C
B
C
D E E D
D
23
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. 24
Greedy (Açgözlü) Yaklaşımı/Yöntemi
27
Kruskal’ın Algoritması: Örnek
8 7
b c d
• Kruskal algoritmasında bütün yollar 4 9
2
listelenip küçükten büyüğe doğru sıralanır. 4 14
• Liste çıkarıldıktan sonra sırasıyla en a 11 i e
7 6
küçükten en büyüğe doğru komşuluklar 8 10
işaretlenir. g f
h 1 2
28
Prim’in Algoritması
29
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.
30
Prim’in Algoritması
31
Prim’in Algoritması - Örnek
32
Prim’in Algoritması - Örnek
33
Prim’in Algoritması - Örnek
34
Prim’in Algoritması - Örnek
35
Prim’in Algoritması - Örnek
Burada
sadece C ve G düğümlerini
inceleyebiliriz. C, E’den 5 uzakta
ve G ise 9 uzakta. C’yi ve EC
ayrıtını seçiyoruz. Ayrıca BC’yi
de kırmızı olarak işaretliyoruz.
36
Prim’in Algoritması - Örnek
burada 39 oldu.
En Kısa Yol Problemi
38
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.
2
A B • y = {B, A, E, C, D}
3 6
• Uzunluk(y) = 4
4 E 8 • Maliyet(y) = 2+3+1+5=11
7 1
D 5
C
39
Ağırlıksız En Kısa Yol Problemi
C Başlangıç
G
D E
40
BFS Tabanlı Çözüm
• S’den başla BFS algoritmasını uygula (çevrim graflarda da çalışır.)
A B
F H
A D E
C Source
G
B G
D E
41H
41
Ağırlıklı Graflarda En Kısa Yol Problemi
2
B
• C den A’ya en kısa yol:
A
1 – C->A (uzunluk: 1, maliyet: 9)
1 – BFS ile hesaplandı
9
3
C
8 2 • C den A’ya en az maliyetli yol:
D E – C->E->D->A (uzunluk: 3, maliyet: 8)
3
– Peki nasıl hesaplayacağız?
42
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-Warshall
43
Dijkstra’nın Algoritması
44
Dijkstra’nın Algoritması
2
A ∞
9 ∞ B
1. O anki en iyi düğümü seç – C
1
9
1 2. Bilinen düğümler kümesine ekle
C
3
0
3. Seçilen düğümün tüm komşularının
8 2 maliyetini güncelle.
D 8
∞ ∞
2 E
3
45
Dijkstra’nın Algoritması
A
2
B
1. O anki en iyi düğümü seç – E
9 ∞
1 2. Bilinen düğümler kümesine ekle
1
9 C 3. Seçilen düğümün tüm komşularının
3
0 maliyetini güncelle.
8 2
D 58 2 E
3
46
Dijkstra’nın Algoritması
2
A 98 ∞ B
1. O anki en iyi düğümü seç – D
1
9
1 2. Bilinen düğümler kümesine ekle
C
3
0
3. Seçilen düğümün tüm komşularının
8 2 maliyetini güncelle.
D 5 2 E
3
47
Dijkstra’nın Algoritması
2
A 8 ∞
10 B 1. O anki en iyi düğümü seç – A
1 2. Bilinen düğümler kümesine ekle
1
9 C
3 3. Seçilen düğümün tüm komşularının
0
8 2 maliyetini güncelle.
D 5 2 E
3
48
Dijkstra’nın Algoritması
D 5 2 E
3
49
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.
3
A B • A’dan C’ye en az maliyetli yol
2
-2 − Dijkstra : A->C, maliyet: 2
C − Gerçek yol A->B->C, maliyet: 1
50