Professional Documents
Culture Documents
Algoritma Analizi 19-TRSlides
Algoritma Analizi 19-TRSlides
Zahra ELMI
Zahra.elmi@izu.edu.tr
Grafik Teorik Problemler
Temel tanımlar
Grafik Gösterimi
Grafik Geçişi (BFS, DFS)
Topolojik sıralama
Güçlü Bağlantılı BileşenlerEn
Kısa Yollar
Tek Kaynaklı Tüm Hedefler (Bellman-Ford, Dijkestra)
Tüm Çiftler (Floyd-Warshall, Johnson)
Minimum Yayılan Ağaç (Kruskal, Prim)
En Kısa Yollar
Tanım
Bize ağırlık fonksiyonu w: E → R olan G = (V, E ) ağırlıklı bir yönlendirilmiş
grafik verildiğini varsayalım. p = ⟨v0, v1,··· ,vk ⟩ yolunun ağırlığı, kenarlarının
ağırlıklarının toplamıdır
k
w ( p) = ∑ w ( vi − 1 , vi ).
i =1
Proof.
p1i pij pjk
Decompose path p into v 1 → v i → v j → vk .
w ( p ) = w ( p1i ) + w ( pij ) + w ( pjk ) .
Assume that there is a path pi′j from vi to vj with weight
w ( pi′j ) < w ( pij ) .
p1i pij′ pjk
Then, v 1 → v i → v j → vk is a path from v 1 to v k whose weight
w (p1i ) + w (pi′j ) + w (pjk ) is less than w ( p ) (contradiction).
En Kısa Yollar
Negatif ağırlıklı kenarlar: G = (V, E ), s'den erişilebilen negatif ağırlıklı
döngüler içermiyorsa, o zaman tüm v ∈ V için, en kısa yol ağırlığı δ(s, v ) iyi
tanımlanmış olarak kalır. s'den erişilebilen bir negatif ağırlık döngüsü varsa,
en kısa yol ağırlıkları iyi tanımlanmamıştır ve δ(s, v ) = −∞ varsayılır.
Döngüler: En kısa yol bir döngü içerebilir mi? Hayır, döngünün yoldan
kaldırılması, aynı kaynak ve hedef köşelere ve daha düşük yol ağırlığına sahip
bir yol ürettiğinden. G = (V, E ) içindeki herhangi bir döngüsel olmayan yol en
fazla |V | farklı köşeler (ve böylece en fazla |V| − 1 kenar), Bu nedenle,
dikkatimizi en fazla |V| − 1 kenara odaklanmalıyız.
En Kısa Yollar: Başlatma
w(u,v)
s
Yolsuz özellik: s'den v'ye bir yol yoksa, o zaman her zaman d [v ] =
δ( s ,v ) = ∞ vardır.
Yakınsama özelliği: s ⇝ u → v, bazı u, v ∈ V için G'deki en kısa
yol ise ve eğer d [u] = δ(s, u ) kenar gevşetmeden (u, v ) önce
herhangi bir zamanda ise, daha sonra her zaman d [v ] = δ(s, v) olur.
Yol-gevşeme özelliği: p = ⟨v0, v1,· ·· ,vk ⟩ ise, s = v0 ile vk
arasındaki en kısa yoldur ve p'nin kenarları (v0, v 1 ) , (v1, v 2 ) , · · · ,
(v k − 1 , vk ) , sırasıyla gevşetilir, ardından d [vk ] = δ(s, vk ) olur.
En Kısa Yollar: Dijkstra'nın algoritması
Dijkstra'nın algoritması, kaynak s'den son en kısa yol ağırlıkları zaten
belirlenmiş olan bir S köşe kümesini korur. Algoritma, minimum en kısa
yol tahminiyle u ∈ V − S tepe noktasını tekrar tekrar seçer, u'yu S'ye
ekler ve u'dan ayrılan tüm kenarları gevşetir.
Analysis
Q bir dizi tarafından gerçeklenirse, Dijkstra algoritmasının zaman
karmaşıklığı O(|V |2) olur. (Daha iyi performansa nasıl ulaşabiliriz?)
En Kısa Yollar: Dijkstra'nın algoritması
Theorem
Negatif olmayan ağırlık fonksiyonu w ve source s ile ağırlıklı bir yönlendirilmiş grafik
G=(V, E) üzerinde çalışan Dijkstra'nın algoritması, tüm u ∈ V köşeleri için d [u] = δ(s, u)
ile sona erer.
Proof.
Şunu kanıtlamak yeterlidir: her bir u ∈ V köşesi için, u kümesi S'ye eklendiğinde d [u] =
δ(s, u)'ye sahibiz.
▪ Başlatma: Başlangıçta, S = 0 ve bu nedenle ifade önemsiz derecede
doğrudur.
▪ Bakım:
• S kümesine eklendiğinde d [u] != δ(s, u) olan ilk tepe noktası u olsun.
• s'den u'ya bir yol olmalıdır (aksi takdirde d [u] = δ(s, u) = ∞ d [u] != δ(s,
u)'yu ihlal eder)
• En az bir yol olduğundan, s'den u'ya giden en kısa yol p vardır. u'yu
S'ye eklemeden önce, yol p, S'deki bir tepe noktasını, yani s'yi, V −
S'deki bir tepe noktasına, yani u'ya bağlar.
• p boyunca ilk tepe noktası y olsun, öyle ki y ∈ V − S olsun ve x ∈ S y'nin
öncülü olsun.
• Bir sonraki sayfada devam edin...
Shortest Paths: Dijkstra’s algorithm
Proof.
▪ Maintenance (cont.):
p1 p2
• p yolu şu şekilde ayrıştırılabilir: s → x → y → u.
Analysis
BELLMAN-FORD algoritmasının zaman karmaşıklığı O(|V| ×|E|).
(Nasıl?)
En Kısa Yollar: Bellman-Ford algoritması
Lemma
G = (V, E ) kaynağı s ve ağırlık fonksiyonu w: E → R olan ağırlıklı, yönlendirilmiş bir
grafik olsun ve G'nin s'den erişilebilen hiçbir negatif ağırlıklı döngü içermediğini
varsayalım. Ardından, |V | − BELLMAN-FORD'un 2 − 4 satırlarının for döngüsünün 1
yinelemesi, s'den ulaşılabilen tüm v köşeleri için d [v ] = δ(s, v ) var.
Proof.
s'den ulaşılabilen herhangi bir v köşesini düşünün.
p = ⟨v0 , v1, · · · , vk ⟩, burada v0 = s ve vk = v, s'den v'ye herhangi bir döngüsel olmayan en
kısa yol olsun.
2 − 4 satırlarının for döngüsünün (|V |−1) yinelemelerinin her biri, tüm E kenarlarını
gevşetir.
i iterasyonda gevşetilen kenarlar arasında, çünkü i = 1, 2, …, k , (vi−1, vi) kenarıdır.
Bu nedenle, yol-gevşeme özelliği ile, d [v ] = d [vk ] = δ(s, vk ) = δ(s, v ) olur.
En Kısa Yollar: Bellman-Ford algoritması
Theorem
BELLMAN-FORD, kaynak s ve ağırlık fonksiyonu w: E → R olan ağırlıklı,
yönlendirilmiş bir G = (V, E ) grafiği üzerinde çalıştırılsın. , tüm v ∈ V köşeleri
için d [v ] = δ(s, v ) var. G, s'den erişilebilen bir negatif ağırlıklı döngü
içeriyorsa, algoritma YANLIŞ döndürür.
Proof.
- G grafiğinin, s'den erişilebilen negatif ağırlıklı döngüler içermediğini varsayalım.
Vertex v'ye s'den ulaşılabiliyorsa, önceki lemma iddiayı kanıtlar.
v'ye s'den ulaşılamıyorsa, talep no-path özelliğinden gelir.
BELLMAN-FORD'un TRUE değerini döndürdüğünü göstermek için iddiayı
kullanıyoruz.
Sonlandırmada, tüm kenarlar için (u, v ) ∈ E ,
d [v ] = δ( s,v )
≤ δ( s,u ) + w ( u ,v ) (by the triangle inequality)
= d [u ] + w ( u , v ),
v0 = vk olduğundan, c'deki her köşe, toplamların her birinde tam olarak bir kez görünür.
∑ik=1 d [vi ] and ∑ki =1 d [vi − 1 ], ve bu yüzden
k
∑ w ( vi − 1 ,vi ) ≥ 0
i =1
ki bu bir çelişkidir.