Tüm ikililer arasında en kısa yollar

Slides:



Advertisements
Benzer bir sunumlar
Algoritmalar Ders 14 En Kısa Yollar II Bellman-Ford algoritması
Advertisements

Algoritma.  Algoritma, belirli bir görevi yerine getiren sonlu sayıdaki işlemler dizisidir.  Başka bir deyişle; bir sorunu çözebilmek için gerekli olan.

Greedy Algorithms.
Örnek 1 Kullanıcının girdiği bir sayının karesini hesaplayan bir program yazınız.
DEPREME DAYANIKLI BETONARME YAPI TASARIMI
KİRİŞ YÜKLERİ HESABI.
YÖNLENDİRME. Yönlendirme ● Statik ● Dinamik ● Kaynakta yönlendirme ● Hop by hop yönlendirme.
BİLGİSAYAR PROGRAMLAMA DERSİ
0-1 Sırt Çantası Problemi
Algoritmalar II Ders 2 Dinamik Programlama Yöntemi.
HİPOTEZ TESTLERİ VE Kİ-KARE ANALİZİ
TAM SAYILAR.
T- Testİ: ORTALAMALAR ARASI FARKLARIN TEST EDİLMESİ
Algoritmalar II Ders 13 Çizgelerde tüm ikililer arasında en kısa yollar.
Sayı Sistemleri.
Hatırlatma: Durum Denklemleri
Algoritmalar II Ders 7 Açgözlü Algoritmalar.
Algoritmalar II Ders 4 Dinamik Programlama Yöntemi.
Veri Yapıları ve Algoritmalar
İSTATİSTİK II Hipotez Testleri - 2.
Yapay Sinir Ağı Modeli (öğretmenli öğrenme) Çok Katmanlı Algılayıcı
Algoritmalar II Ders 14 Çizgelerde tüm ikililer arasında en kısa yollar.
Yrd. Doç. Dr. Mustafa Akkol
C Programlama Yrd.Doç.Dr. Ziynet PAMUK BMM211-H05
BİLGİSAYAR PROGRAMLAMA Ders 5: Döngüler
Ünite 9: Korelasyon Öğr. Elemanı: Dr. M. Cumhur AKBULUT.
- Sağlama - Kısa yoldan Çarpmalar
İleri Algoritma Analizi
En Kısa Yol Problemleri (Shortest Path Problems)
Derinlik öncelikli arama (Depth-first Search(DFS))
İleri Algoritmalar 2. ders.
Mutlak Dağılım Ölçüleri Nispi Dağılım Ölçüleri
Çizge Teorisi ve Algoritmaları
İleri Algoritma Analizi
Ağırlıksız ikili eşleştirme
9. Ders Tüm ikililer arasında en kısa yollar
Algoritmalar II Ders 3 Dinamik Programlama Yöntemi.
İleri Algoritma Analizi
Çizge Teorisi ve Algoritmalari
Self Organizing Map-SOM
İleri Algoritma Analizi
Benzetim 11. Ders İmalat Yönetimde Benzetim.
Komut düzeyi kontrol yapıları
Algoritmalar II Ders 12 DFS algoritması. Kirişlerin sınıflandırılması. Topolojik Sıralama.Kuvvetli bağlantılı bileşenler.
Doğrusal Mantık Yapısı İle Problem Çözme
Algoritmalar II Ders 15 En Küçük Örten Ağaçlar.
Algoritmalar II Ders 13 Çizgelerde tüm ikililer arasında en kısa yollar.
Çizge Algoritmaları.
NİŞANTAŞI ÜNİVERSİTESİ
İleri Algoritma Analizi
ÖLÇME-DEĞERLENDİRME 1.DERS
Bilgisayar Bilimi Koşullu Durumlar.
NİŞANTAŞI ÜNİVERSİTESİ
6. DÖNGÜ (TEKRARLAMA) DEYİMLERİ
YÜZDELER.
NİŞANTAŞI ÜNİVERSİTESİ
BLM-111 PROGRAMLAMA DİLLERİ I Ders-10 Diziler
MTM216 GÖRSEL PROGRAMLAMA
İleri Algoritma Analizi
Algoritmalar II Ders 15 En Küçük Örten Ağaçlar.
Algoritmalar II Ders 2 Dinamik Programlama Yöntemi.
8. Ders Tüm ikililer arasında en kısa yollar
Rekürensler Rekürens aranan fonksiyonun ve onun daha önceki girişlerdeki değerinin bir arada bulunduğu denklem veya eşitsizliktir. Örneğin, MERGE-SORT.
Chapter 4 Divide-and-Conquer
10. Ders Floyd-Warshal algoritması
Ortam-Bağımsız Gramerler (OBG)
Çizge Algoritmalari 6. ders.
Prof. Dr. Halil İbrahim Karakaş
EŞ YÜKSELTİ (TESVİYE) EĞRİLERİNİN
Sunum transkripti:

Tüm ikililer arasında en kısa yollar Matris Çarpımı Algoritması Floyd-Warshall Algoritması

Tüm ikililer arasında en kısa yollar Verilen: Yönlü çizge G = (V, E) Ağırlık fonksiyonu w : E → R Hesapla: Çizgenin herhangi 2 köşesi arasındaki en kısa yolu Sonucun ifade edilmesi: en kısa yolları gösteren δ(u, v) sayılarından oluşan bir n × n matrisi 1 2 3 5 4 -4 7 6 -5 8

Motivasyon Bilgisayar ağları Uçak ağları (e.G. Flying time, fares) Demiryolu ağları Her hangi 2 şehir arasındaki en kıs ayol uzunluklarını gösteren tablo

Bilinen algoritmaların yardımıyla çözümler BELLMAN-FORD algoritmasını her köşeyi başlangıç köşe alarak çalıştır: İşlem süresi O(V2E) olur ve eğer çizge yoğun çizge ise E = (V2) olduğundan işlem süresi O(V4) olur Negatif ağırlık yoksa her köşe için Dijkstra algoritması çalıştır: İşlem süresi O(VElgV) olur (ikili yığın veri yapısı ile) ve çizge yoğun ise bunun anlamı O(V3lgV) demek olur Biz bu derste işlem süresi O(V3) olan ve veri yapısından bağımsız algoritma göreceğiz.

Tüm ikililer arasında en kısa yollar G çizgesi ağırlıkların komşuluk matrisi ile verilmiş olsun W = (wij), n x n matris, |V| = n Köşeler 1 den n e numaralı olsun if i = j wij = if i  j , (i, j)  E if i  j , (i, j)  E Çıkış bir n x n matrisi olacak D = (dij), burada dij = δ(i, j) Dinamik programlama kullanılacak 1 2 3 5 4 -4 7 6 -5 8 Ağırlık (i, j) ∞

En kısa yolun optimal altyapısı  11 j En fazla m kiriş En kısa yolun her alt yolu en kısadır p: i ile j arasında en fazla m kiriş kullanan en kısa yol olsun If i = j w(p) = 0 ve p yolunda kiriş yok k En fazla m - 1 kiriş If i  j: p = i k  j p’ yolunda en fazla m-1kiriş var p’ en kıs ayoldur δ(i, j) = p’ δ(i, k) + wkj

Özyinelemeli çözüm lij(m) = i ile j arasında en fazla m kirişi olan en kısa yolun ağırlığı m = 0: lij(0) = if i = j if i  j m  1: lij(m) = i ile j arasında en fazla m kirişi olan en kısa yolun ağırlığı: ya en fazla m – 1 kirişi olan en kısa yolun ağırlığına eşit olur ya da j den önce gelen tüm k lara bakılarak k dan j ye geçen m kirişli en kısa yolun ağırlığına eşit olur i  11 j En fazla m kiriş  k min { , } lij(m-1) min {lik(m-1) + wkj} 1  k  n = min {lik(m-1) + wkj} 1  k  n

En kısa yolun hesaplanması m = 1: lij(1) = İ den j ye en fazla 1 kiriş kullanarak giden en kısa yolun ağırlığı W = (wij) veriliyor, hesapla: L(1), L(2), …, L(n-1), burada L(m) = (lij(m)) L(n-1) matrisinde tüm kısa yolların ağırlıkları olur L(m-1) ve W verildiğinde hesapla L(m) En kısa yolu bir kiriş daha kullanarak genişlet Eğer çizgede negatif döngü yoksa en kısa yolda en fazla n - 1 kiriş olur δ(i, j) = lij(n-1) and lij(n), lij(n+1). . . wij L(1) = W = lij(n-1)

En kısa yolun genişletilmesi lij(m) = min {lik(m-1) + wkj} 1  k  n k j k j i * i = L(m-1) n x n W L(m) Değiştir: min  + +   L(m) matrisinin hesaplanması Matris çarpımı hesaplanmasına benzer

EXTEND(L, W, n) create L’, an n × n matrix for i ← 1 to n do for j ← 1 to n do lij’ ←∞ for k ← 1 to n do lij’ ← min(lij’, lik + wkj) return L’ Running time: (n3)

SLOW-ALL-PAIRS-SHORTEST-PATHS(W, n) L(1) ← W for m ← 2 to n - 1 do L(m) ←EXTEND (L(m - 1), W, n) return L(n - 1) Running time: (n4)

Örnek … en son L(4) 3 8  -4 1 7 4 2 -5 6 3 8  -4 1 7 4 2 -5 6 3 8 2 L(m-1) = L(1) W 3 8  -4 1 7 4 2 -5 6 3 8  -4 1 7 4 2 -5 6 3 8 2 -4 3 -4 1 7 L(m) = L(2) … en son L(4) 4 5 11  2 -1 -5 -2 8 1 6 

Örnek  1 6 l14(2) = (0 3 8  -4)  = min (, 4, , , 2) = 2

Matris çarpımı ile benzerliği C = a  b cij = Σk=1n aik  bkj Karşılaştır: D(m) = d(m-1)  C  dij(m) = min1≤k≤n {dik(m-1) + ckj}

İşlem zamanını iyileştirme Tüm L(m) matrislerini hesaplama gereksinimi yoktur Eğer negatif döngü yoksa: L(m) = L(n - 1) tüm m  n – 1 için L(n-1) matrisini aşağıdaki gibi hesaplayabiliriz: L(1) = W L(2) = W2 = W  W L(4) = W4 = W2  W2 L(8) = W8 = W4  W4 …

FASTER-APSP(W, n) L(1) ← W m ← 1 while m < n - 1 do L(2m) ← EXTEND(L(m), L(m), n) m ← 2m return L(m) : L(n - 1) matrsisinden sonra matrisler değişmez İşlem zamanı: (n3lg n)

The Floyd-Warshall Algoritması Giriş: Yönlü ağırlıklı çizge G = (V, E) Negatif ağırlıklar olabilir Negatif döngü olamaz Hesapla: Çizgenin her hangi 2 köşesi arasındaki en kısa yolun ağırlığı 1 2 3 5 4 -4 7 6 -5 8

En kısa yolun altyapısı G deki köşeler V = {1, 2, …, n} p = v1, v2, …, vl bir yol olsun p yolundaki ara köşe {v2, v3, …, vl-1} kümesinin herhangi bir elemanıdır Örneğin: p = 1, 2, 4, 5: {2, 4} p = 2, 4, 5: {4} 5 1 3 4 2 6 0.5 2

En kısa yolun altyapısı Her i, j  V için ara köşeleri {1, 2, …, k} kümesinden olan i den j ye giden tüm yollara bakalım p yolu bu yollar arasında ağırlığı en az olan olsun p1 pu j i pt Ara köşeler arasında k dan büyük numaralı köşe yoktur

Örnek dij(k) = i köşesinden j köşesine olan ve ara köşeleri {1, 2, …, k} kümesinden olan en az ağırlıklı yolun (en kısa yolun) ağırlığı d13(0) = d13(1) = d13(2) = d13(3) = d13(4) = 6 6 1 3 4 2 6 0.5 5 5 4.5

En kısa yolun altyapısı k köşesi p de ara köşe değil i den j ye olan ve ara köşeleri {1, 2, …, k} kümesinden olan en kısa yol, i den j ye olan ve ara köşeleri {1, 2, …, k - 1} kümesinden olan en kısa yolun aynısıdır k köşesi p de ara köşe olsun p1 yolu i den k ya en kısa yol olsun p2 yolu k dan j ye en kısa yol olsun k köşesi p1, p2 yollarında ara köşe değil p1 ve p2 yolları sırasıyla i den k ya ve k dan j ye olan ve ara köşeler {1, 2, …, k - 1} den olan en kısa yollardır k i j i  k j p1 p2

Özyinelemeli Çözüm dij(k) = i den j ye olan ve ara köşeleri {1, 2, …, k} kümesinden olan en kısa yolun ağırlığı k = 0 dij(k) = wij

Özyinelemeli çözüm dij(k) = i den j ye olan ve ara köşeleri {1, 2, …, k} kümesinden olan en kısa yolun ağırlığı k  1 Durum1: k köşesi p en kısa yolu için ara köşe değil dij(k) = k i j dij(k-1)

Özyinelemeli çözüm dij(k) = i den j ye olan ve ara köşeleri {1, 2, …, k} kümesinden olan en kısa yolun ağırlığı k  1 Durum2: k köşesi p en kısa yolu için ara köşedir dij(k) =  k j i dik(k-1) + dkj(k-1)

En kısa yol ağırlığının hesaplanması dij(k) = wij if k = 0 min {dij(k-1) , dik(k-1) + dkj(k-1) } if k  1 Çözüm: D(n) = (dij(n)): dij(n) = (i, j)  i, j  V i j j + (k, j) i (i, k) D(k-1) D(k)

FLOYD-WARSHALL(W) n ← rows[W] D(0) ← W for k ← 1 to n do for i ← 1 to n do for j ← 1 to n do dij(k) ← min (dij(k-1), dik(k-1) + dkj(k-1)) return D(n) İşlem süresi: (n3)

Example dij(k) = min {dij(k-1) , dik(k-1) + dkj(k-1) } 3 8  -4 1 7 4 D(0) = W D(1) 1 2 3 5 4 -4 7 6 -5 8 1 2 3 4 5 1 2 3 4 5 1 3 8  -4 1 7 4 2 -5 6 1 3 8  -4 1 7 4 2 6 2 2 3 3 5 -5 -2 4 4 5 5 D(2) 1 2 3 4 5 D(3) D(4) 3 8 -4  1 7 4 2 5 -5 -2 6 4 3 8 4 -4  1 7 5 11 2 -5 -2 6 3 4 -4 1 5 2 -1 -5 -2 6 -1 3 -4 -1 5 11 7 3 -1 8 5 1 COSC3101A

Geçişken kapanma Verilen G çizgesi için, bu çizgenin geçişken kapanması G* : G* nin köşeleri ile G nin köşeleri aynıdır G de u dan v (u  v) ye yol varsa, G* de u dan v ye kiriş var D E B G C A B A D C E G*

Yönlü çizgenin geçişken kapanması Tanım: Yönlü bir G çizgesi için G*= (V, E*) çizgesine geçişken kapanma denir, burada E* = {(i,j): G de i den j ye yol var} Verilen yönlü G = (V, E) çizgesinde her i ve j köşesi için i den j ye yol olup olmadığını bulmak istiyoruz.

Algoritma Devrik kapanma Floyd-Warshall algoritmasının yardımıyla bulunabilir (Eğer ise yol vardır) Floyd-Warshall algoritmasına benzer yolla da bulunabilir: i den j ye ara köşeleri { 1,2,…, k} kümesinde olan yol olup olmadığını gösteren Bool değişkeni olsun. (i,j) kirişinin E* de olması için gerek ve yeter şart = 1 olmasıdır. ={ 0 if i  j ve (i, j)  E 1 if i = j ve (i, j)  E

Transitive-Closure Pseudo Code Transitive-Closure(G) (n3) 1 n  | V(G)| 2 for i 1 to n 3 do for j  1 to n 4 do if i = j or (i,j) E[G] 5 then tij(0)  1 6 else tij(0)  0 7 for k  1 to n 8 for i 1 to n 9 for j  1 to n 10 11 return T(n)