En Ksa Yol Problemi Dijkstra Algoritmas A Nedichin
En Kısa Yol Problemi: Dijkstra Algoritması A. Nedich’in sunumundan uyarlanmıştır.
Bir Düğümden Bütün Düğümlere Olan En Kısa Yollar (One-to-All Shortest Path Problem) • Ağırlıklandırılmış bir graf verilsin (V, E, C) V, düğümler kümesi E, kenarlar kümesi C, ağırlıklar kümesi. cij , i ve j düğümleri arasındaki ağırlığı gösterir. Bir düğümden bütün düğümlere olan en kısa yol, verilen s kaynak düğümünden graftaki bütün düğümlere olan ek kısa yolları ifade etmektedir. – Ağırlıklar maliyet (cost) olarak da ifade edilir. – –
En Kısa Yol Problemi Algoritmaları • Dijkstra algoritması – Negatif olmayan maliyetli problemleri çözer. cij >=0 • Bellman-Ford algoritması – Herhangi bir maliyeti olan problemlere uygulanabilir. • Floyd-Warshall algoritması – Herhangi bir maliyeti olan problemlere uygulanabilir. – Hepsiden hepsine (all-to-all) en kısa yol problemini çözer.
Dijkstra Algoritması • Verilen s düğümünden bütün diğer düğümlere olan en kısa yolları bulur. • s düğümü başlangıç noktası, ilk düğüm veya kaynak olarak isimlendirilir. • Algoritmanın çalışma şekli – Algoritma s kaynak düğümünden diğer düğümlere olan mesafeleri ilklendirerek başlar. – Algoritma adım çalışırken, her adımda mesafe değerlerini günceller. – Herbir adımda , s düğümünden diğer düğüme olan en kısa mesafe belirlenir.
Dijkstra Algoritması • Algoritma, herbir düğümün durumu belirler. • Bir düğümün durumu iki özellik içerir. – Bunlar, mesafe değeri ve durum etiketidir. • Bir düğümün mesafe değeri, s kaynağından o düğüme olan mesafesini gösteren bir sayıdır. • Durum etiketi ise bir düğümün mesafe değerinin s düğümüne en kısa yol olup olmadığını belirten etikettir. – Eğer, bir düğümün mesafe değeri, s düğümünden olan en kısa yolu gösteriyorsa o düğümün durum etiketi Kalıcıdır (permanent – p). – Diğer durumda, o düğümün durum etiketi Geçicidir (temporary –t). • Algoritma, düğümlerin durumlarını adım günceller. • Herbir adımda bir düğüm Şuanki (Current) olarak işaretlenir.
Notasyon • dl , l düğümüne olan mesafe değerini gösterir. • p veya t, bir düğümün durum etiketini gösterir. p, kalıcı ve t ise geçiciyi ifade eder. • cij , i ve j linkleri arasındaki maliyettir.
Algoritm Adımları Adım 1. İlklendirme • s düğümüne sıfır mesafe değeri ata, kalıcı (permanent) olarak etiketle (0, p). • Diğer düğümlerin mesafe değerlerini yap ve bu düğümleri geçici (temporary) olarak etiketle (∞, t) • Üzerinde çalışılan s düğümünü şuanki (current) düğüm yap.
Adım 2. Mesafe değeri güncelleme ve şuanki düğüm güncelleme, i şuanki (current) düğümü göstersin. 1. Şuanki düğüm i’den ulaşılabilecek ve geçici etiketi bulunan J düğüm kümesini bul. Bu düğümlerin mesafe değerlerini güncelle. J kümesindeki herbir j düğümü için dj mesafe değerini güncelle. – • Yeni dj =min{dj , di + cij } 2. J düğümünde bulunan ve en küçük mesafe değeri dj’ye sahip j düğümünü bul. – j* min dj=dj* 3. j* düğümünün etiketini kalıcı (p) yap ve bu düğümü şuanki düğüm olarak ata.
Adım 3. Sonlandırma Kriteri • Eğer, s düğümünden ulaşılabilecek bütün düğümler kalıcı (p) olarak işaretlendiyse algoritma durur. – Eğer ulaşılamayan ve geçici (t) olan düğümler var ise bu düğümlerin durum etiketini kalıcı yap. • Diğer durumda Adım 2’ye git.
Dijkstra Algoritması: Örnek • Aşağıdaki grafta düğüm 1’den diğer düğümlere olan en kısa yolları Dijkstra algoritmasını kullanarak bulunuz?
İlklendirme – Adım 1 • Düğüm 1 şuanki düğüm olarak işaretlendi. • Düğüm 1’in durumu (0, p) oldu. • Diğer düğümler (∞, t) oldu.
Adım 2 (Birinci İterasyon) • Düğüm 1’den ulaşılan geçici düğümler J={2, 3, 6}. • J={2, 3, 6} düğümlerinin mesafe değerlerini güncelle d 2=min{d 2 , d 1 + c 12} = min{∞, 0+7}=7 d 3=min{d 3 , d 1 + c 13} = min{∞, 0+9}=9 d 6=min{d 6 , d 1 + c 16} = min{∞, 0+14}=14 • J düğümleri içerisinden en küçük mesafe değerinin düğümünü seç. • Düğüm 2’yi seç ve kalıcı (p) yap. • Düğüm 2 şuanki düğüm olur.
Adım 2 ( İkinci İterasyon) • Düğüm 2’den ulaşılan geçici düğümler J={3, 4}. • J={3, 4} düğümlerinin mesafe değerlerini güncelle d 3=min{d 3 , d 2 + c 23} = min{9, 7+10}=9 d 4=min{d 4 , d 2 + c 24} = min{∞, 7+15}=22 • J düğümleri içerisinden en küçük mesafe değerinin düğümünü seç. • Düğüm 3’ü seç ve kalıcı (p) yap. • Düğüm 3 şuanki düğüm olur.
Adım 2 (Üçüncü İterasyon) • Düğüm 3’den ulaşılan geçici düğümler J ={4, 6}. • J ={4, 6} düğümlerinin mesafe değerlerini güncelle d 4=min{d 4 , d 3 + c 34} = min{22, 9+11}=20 d 6=min{d 6 , d 3 + c 36} = min{14, 9+2}=11 • J düğümleri içerisinden en küçük mesafe değerinin düğümünü seç. • Düğüm 6’yı seç ve kalıcı (p) yap. • Düğüm 6 şuanki düğüm olur.
Adım 2 (Dördüncü İterasyon) • Düğüm 6’den ulaşılan geçici düğüm J ={5}. • J={5} düğümünün mesafe değerini güncelle d 5=min{d 5 , d 6 + c 65} = min{∞, 11+9}=20 • Düğüm 5’i kalıcı (p) yap. • Düğüm 5 şuanki düğüm olur.
Adım 3 • 1 düğümünden bütün düğümlere ulaşıldığı için algoritma durur. • Ulaşılamayan düğüm olsaydı, o düğüm (∞, p) yapılacaktı. • En kısa yollar ve maliyetleri 1 -2 : maliyeti 7 1 -3 : maliyeti 9 1 -3 -4 : maliyeti 20 1 -3 -6 -5 : maliyeti 20 1 -3 -6 : maliyeti 11
- Slides: 16