Büyük veri için DAEKSTRA algoritması incelenmesi. Grafikler. Deiquistra algoritmasını kullanan iki köşe arasındaki en kısa mesafeyi bulma. Algoritmanın paralel uygulamasının olası yolları ve özellikleri

DAEKSTRA algoritması, yönlendirilmemiş bir grafikte köşeler arasındaki en kısa yolu bulmak için tasarlanmıştır.

Algoritma fikri aşağıdaki gibidir: İlk önce ilk Vermex'in yolunu sıfıra seçin ve bu köşeyi önceden seçilen sete girdik, kalan dayanılmaz köşelere olan mesafe tanımlanır. Her bir sonraki aşamada, aşağıdaki seçili Vertex'i, en küçüğün ve bağlı kenara, çok sayıda seçili olmayan bir (bu mesafe, seçilen köşeye artı, kaburga uzunluğuna eşit olacak şekilde) olan mesafeyi bulduk. .

Örnek 1. Sütundaki en kısa yolu üstten bulun L. Başa D. (Şek. 10.7).

İncir. 10.7.

Algoritmayı bir adım dizisi biçiminde yazıyoruz (Tablo 10.1). Adım 1. İlk tepeden mesafeleri belirleyin L. diğerlerine kadar.

Tablo 10.1

Daekstra yöntemi (ilk adım)

Seçilmiş

Seçilen Yolu

Seçilmemiş üst

Adım 2. En küçük mesafeyi seçin L. önce İÇİNDE; Üstten görünüm İÇİNDE Yeni seçilen için kabul edildi. En küçük mesafeyi buldum, yeni tepeden kaburgaların uzunluğuna ekle İÇİNDE diğerlerine kadar. Minimum mesafeyi seçin İÇİNDE önce N. Yeni tepe N. Seçilen için kabul ediyoruz (Tablo 10.2).

Tablo 10.2.

DAEKSTRA yöntemi (ikinci adım)

Seçilmiş

Seçilen Yolu

Seçilmemiş üst

Netlik için, gelecekte OO işareti yerine, "-" işareti koyacağız.

Adım 3. Vertex'in mesafesini belirleyin N L. Kalanların hepsi hakkında (hariç) L. ve İÇİNDE), Tabloda gösterildiği gibi. 10.3.

Tablo 10.3.

DAEKSTRA YÖNTEMİ (Üçüncü Adım)

Seçilmiş

Seçilen Yolu

Seçilmemiş üst

Vershina'dan uzaklık L. Üstünden Önce n Vershins G. Eşit, 18 şartlı birim. Bu mesafe mesafeden daha fazlasıdır Lb + bg. \u003d 16 Geleneksel birimler, bunun sonucunda daha sonra dikkate alınmadığı için. Benzer yapılara devam ediyor, biz tabl olacağız. 10.4. Böylece, köşeleri arasındaki en kısa yolun uzunluğu bulundu. L. ve D. (44 geleneksel birimler).

Yol yolu aşağıdaki gibi belirlenir. Geri dönüş görünümünü son versiyondan ilke yaptık. Üste karşılık gelen sütunu, aşağıdan yukarı çekin ve asgari değerin ilk görünümünü sabitleriz. Üste karşılık gelen sütunda D, İlk defa, koşullu birimlerin minimum uzunluğu dördüncü satırdaki alttan göründü. Bu çizgi köşeyi gösterir S, hangi go, yani. Sonra köşeyi tepeye karşılık gelen sütunu göz önünde bulundurmanız gerekir. S.

Tablo 10.4.

Seçilen üst

Seçilen Yolu

Seçilmemiş üst

Bu sütunda, 27 geleneksel birime eşit minimum uzunluk, aşağıdaki tepex'i gösterir. G, bu gidecek vb. Böylece, yolun yörüngesini alırız: (L, b, g, s, d).

Örnek 8. 1. ve 7. köşeler arasındaki sütundaki en kısa yolu bulun (Şek. 10.8).

Belirle (Tablo 10.5) Aşağıdaki seçilen Vertex, en küçük ve bağlı kenarın, seçilen ayarlara ait olan köşelerden biriyle olan mesafenin (bu mesafe, seçilen Vertex'in artı kaburganın uzunluğuna eşit olacaktır) .


İncir. 10.8. Grafik (fakat) ve karşılık gelen ordu matrisi (b)

DAEKSTRA Yönteminin Tablo Gerçekleştirilmesi

Tablo 10.5.

Seçilmiş

Seçilen Yolu

Seçilmemiş üst

u 6.

Geri dönüş görünümünü son versiyondan ilke yaptık.

Üste karşılık gelen sütunu, aşağıdan yukarı çekin ve asgari değerin ilk görünümünü sabitleriz. En kısa yol eşit olacak (V 7 - v 5 - v 2 - y ().

ve Kontrol soruları

  • 1. Algoritmaların teorik karmaşıklığı nedir: ahşap çözümlerin inşaatı, dinamik programlama ve Daeksters?
  • 2. Yönlendirilmiş ve gereksiz grafik için ahşap çözümlerin kullanımının özelliği nedir?
  • 3. Uygulanan görevlerin çözülmesinde, belirtilen köşeler arasındaki en kısa mesafe sütununda tanımlı algoritmalardır?
  • 4. DAEKSTRA algoritması, yönlendirilmiş grafikteki en kısa mesafeyi belirlediği kabul edilebilir mi?
  • 5. Daekstra algoritması nasıl çalışır?
  • 6. Dinamik programlama algoritması, köşeleri arasındaki en kısa mesafede tanım görevi ile ilgili olarak nasıl çalışır?

Köşeleri ve kaburgalı bir yönelimli veya yönelimli bir askıya alınmış grafik. Tüm Röbembers'ların ağırlıkları nazik değildir. Üstün bazı başlangıç \u200b\u200büst kısmı belirtilir. En kısa yolların uzunluklarını yukarıdan tüm diğer köşelere bulmaları gerekmektedir ve en kısa yolları çıkarmanın bir yolunu sağlayın.

Bu görevin "tek kaynağı olan en kısa yolların görevi" (tek kaynak en kısa yollar sorunu) olarak adlandırılır.

Algoritma

Hollandalı bir araştırmacı öneren algoritmayı açıklar. Dyacstra (Dijkstra) 1959'da

Her köşe için, en kısa yolun mevcut uzunluğunu B'den saklayacağımız bir diziyi başlatacağız. Başlangıçta, diğer tüm köşeler için, bu uzunluk sonsuzluğa eşittir (bir bilgisayara uygulanırken, genellikle sonsuzluk olarak sadece oldukça büyük bir sayı, bilerek olası yol uzunluğundan daha fazlasını seçilir):

Ek olarak, her köşe için saklayacağımız, hala işaretli ya da değil, yani. Boolean dizisinin başkanı. Başlangıçta, tüm köşeler etiketlenmez, yani

Deiquist algoritması kendisinden oluşur yineleme. Bir sonraki yinelemede, henüz etiketlenmemiş, yani, yani en küçük büyüklükte bir köşe seçilir.:

(Başlangıç \u200b\u200büstünün ilk yinelemede seçileceği açıktır.)

Bu şekilde seçilen zirveye işaretlenmiştir. Sonraki, mevcut yinelemede, üstlerden yapılır rahatlama: Üstten gelen tüm kaburgalar görüyoruz ve her bir köşe için algoritma değeri iyileştirmeye çalışıyor. Geçerli kaburga uzunluğunun eşit olalım, sonra rahatlama gibi görünüyor:

Bu, mevcut yineleme uçlarıdır, algoritma bir sonraki yineleme ilerler (üst, en düşük değerle tekrar seçilir, rahatlama, vb.).). Aynı zamanda, sonuçta, yinelemeden sonra, grafiğin tüm köşeleri etiketlenecek ve algoritma çalışmalarını tamamlar. Bulunan değerlerin B'den en kısa yolların istenen uzunlukları olduğu tartışılmaktadır.

Grafiğin tüm köşeleri köşesinden elde edilemez olmasa da, kendileri için değerler sonsuz kalacağını belirtmekte fayda var. Algoritma'nın az son yinelemelerinin sadece bu köşeleri seçeceği, ancak bu yinelemeleri üretmek için faydalı bir iş olmayacağı açıktır (çünkü sonsuz mesafenin diğer, hatta sonsuz mesafeleri önleyemeyeceği için). Bu nedenle, seçilen vertex tepex'i sonsuz bir mesafe ile alır en kısa sürede algoritma hemen durdurulabilir.

Yolları geri yükleme. Tabii ki, genellikle en kısa yolların uzunluğunu değil, aynı zamanda yolları kendilerini almak için bilmeniz gerekir. Herhangi bir Vertex'in en kısa yolunun daha sonra restorasyonu için yeterli bilgi tasarrufu yapacağız. Bunun için yeterli sözde dizi ataları: Vertex numarasının, en kısa yolda en kısa yolda olan her köşe için depolandığı diziliş. Bazı Vertex'e en kısa yolu alırsak ve ardından en son köşeyi bu yoldan çıkarırsak, bazı tepe noktasıyla biten bir yol elde edecek ve bu yolun en kısa sürede olacaktır. Öyleyse, bu ataların bu dizisinin tadını çıkarırsak, en kısa yol üzerinde restore edilebilir, yalnızca başlangıç \u200b\u200btepesine gelinceye kadar her seferinde anayı alın - bu yüzden istediğiniz en kısa yolu alırız, ancak tersine kaydedilir sipariş. Yani en kısa yolu:

Bu ataların nasıl yapıldığını anlamak için kalır. Ancak, bu çok basit yapılır: her başarılı rahatlama ile yani, yani. Bazı Vertex'e bir mesafe seçilen vertexten geliştirildiğinde, Vertex'in atasının üst olduğunu kaydederiz:

Kanıt

Temel ifadeAşağıdaki, Deiquist algoritmasının doğruluğuna dayanır. Herhangi bir zirvenin işaretlendikten sonra, şu anki mesafe zaten en kısa ve buna göre değişmeyeceği iddia edilmektedir.

Kanıt İndüksiyonla üreteceğiz. İlk yineleme için adalet açıktır - sahip olduğumuz köşeler için, en kısa yolun uzunluğu. Şimdi bu ifadenin önceki tüm yinelemeler için yerine getirilmesine izin verin, yani. Hepsi zaten işaretli köşeler; Mevcut yinelemeden sonra ihlal edilmediğini kanıtlıyoruz. Vermin mevcut yinelemede seçilmesine izin verin, yani. Algoritmanın işaretleneceği zirve. Bunun için en kısa yolun uzunluğuna eşit olduğunu kanıtlıyoruz (bu uzunluğu ile gösteriyoruz).

Üstün en kısa yolunu düşünün. Bu şekilde bu şekilde iki şekilde ayrılabileceği açıktır: sadece belirgin köşelerden oluşan (en azından başlangıç \u200b\u200büstü bu şekilde olacaktır) ve yolun geri kalanı (ayrıca işaretli köşeleri de içerebilir, ancak korunmasızlarla başlar) . Yolun ilk tepesi ile ve yolun son köşeleri ile belirtir.

İlk önce Vertex, yani ifademizi kanıtlıyoruz. Eşitliği kanıtlıyoruz. Bununla birlikte, bu neredeyse açıktır: Sonuçta, önceki yinelemelerden birinde, Vertex'i seçtik ve ondan rahatlama yaptık. (Vertex'in seçimi nedeniyle) olduğundan, en kısa yol, bir artı kenara en kısa yola eşittir, daha sonra değerden rahatlama yaparken, istenen değere gerçekten kurulur.

Röber'in değerlerinin olumsuzlukları nedeniyle, en kısa yolun uzunluğu (ve aynı şekilde kanıtlanmış) en kısa yolun uzunluğunu aşmaz. ÖNCEKİ (sonuçta, Daekstra algoritması, hiç mümkün olduğundan daha kısa bir yol bulamadığı için), sonuç olarak, ilişkiyi alıyoruz:

Öte yandan, her iki köşe de değişmez olduğundan, yukarıdan bu yana mevcut yinelemede seçildiğinden, bir köşe değil, daha sonra başka bir eşitsizlik elde ediyoruz:

Bu iki eşitsizlikten, eşitliği tamamlıyoruz ve sonra bu oranlarda bulunanlardan elde ettik:

q.e.d.

Satış

Böylece, DAEKSTRA algoritması, her biri gereksiz tepex tarafından en küçük değerle seçilen yinelemelerdir, bu köşe işaretlenmiştir ve daha sonra bu tepeden gelen tüm kaburgaların görüntülenir ve geliştirmek için her kenar boyunca bir girişimde bulunulur. kenarın diğer ucundaki değer.

Algoritmanın çalışma süresi:

Bu işlemlerin en basit şekilde uygulanması ile üstleri aramak, operasyonlar harcanacak ve bir rahatlama - operasyonlar ve finalde asimptotik Algoritma:

Satış:

Const Int Inf \u003d 1000000000; int main () (int n; ... okuma n ... vektör< vector < pair< int ,int > \u003e\u003e g (n); ... okuma grafiği ... int s \u003d ...; // üst başla Vektör< int > d (n, inf), p (n); D [S] \u003d 0; Vektör< char > u (n); için (int i \u003d 0; ben< n; ++ i) { int v = - 1 ; for (int j= 0 ; j< n; ++ j) if (! u[ j] && (v == - 1 || d[ j] < d[ v] ) ) v = j; if (d[ v] == INF) break ; u[ v] = true ; for (size_t j= 0 ; j< g[ v] .size () ; ++ j) { int to = g[ v] [ j] .first , len = g[ v] [ j] .second ; if (d[ v] + len < d[ to] ) { d[ to] = d[ v] + len; p[ to] = v; } } } }

Burada grafik bitişiklik listeleri biçiminde depolanır: Her köşe listesi için, bu Vertex'ten Yıkan Ryoebes listesini içerir, yani. Çiftin ilk elemanının, kaburga ve ikinci elemanın kaburganın ağırlığıdır.

Algorimtm Dejekstra (Dijkstra "s algoritması) - 1959'da Hollanda bilimcisi E. Diyakstroy tarafından icat edilen grafiklerde algoritma. Grafiğin köşelerinden birinden gelen en kısa mesafeyi diğerlerine bulur. Algoritma sadece olumsuz olmayan grafikler için çalışır. Ağırlık. Algoritma, programlama ve teknolojilerde yaygın olarak kullanılır, örneğin, halka rotalarını ortadan kaldırmak için OSPF protokolünü kullanır. Ayrıca "en kısa yoldan" (ilk önce en kısa yol) olarak da bilinir.

DAEKSTRA algoritması, asılı yönlendirilmiş bir grafik g \u003d (v, e) için bir köşeden en kısa yolların sorununu çözer, tüm kenarların ağırlıkları negatif değildir ((U, V)? 0 için) hepsi (u, v) e). Grafiğin kenarlarının eşit olmadığı durumlarda, bu algoritmanın kullanılması tavsiye edilir.

Görev ifadeleri.Bir grafik var. Vermex'in bir kısmı bir Vertex 1 olarak gösterilir. Vermex 1'den gelen minimum yolları grafiğin köşelerinin her birine bulmanız gerekir. Asgari yol, yol boyunca minimum fiyat miktarına sahip bir yol denir. Fiyat, kaburga tartıcının negatif olmayan bir numarasını arayalım.

Algoritma fikri.Fikir, aşağıdaki açık ifadeye dayanır: en üstten gelen minimum yolun yapılması fakat B'nin tepesine ve Vertex B'nin belirli sayıda köşe ile ilişkili olmasını sağlayın. C tarafından belirtir - VERTEX B'deki yolun fiyatını Vertex I'e kadar. C i Minimum değerinden birini seçin. Daha sonra B noktasının minimum devamı, seçilen değerden geçecektir.

Bu ifade gerçekten kanıt gerektirmez. Ve çok ciddi bir sonuç ortaya çıktı. Zaten minimum yollar geçiren birçok köşe olmasına izin verin. Böyle bir set garanti edilir, bu bir Vertex'tir. Sonra son adım sayısı için grafiğin tüm köşeleri özel olacaktır ve bu bir çözüm olacaktır.

DAEKSTRA algoritmasının özü ve çeşitli seçilenlere başka bir tepe ekleme prosedürü. Bu prosedür iki adımdan oluşur:

1. Biz ayrılan ve en düşük fiyatla köşeleri arasında bulunan bir çok sayıda olay tops inşa ediyoruz. Vertix bulundu, ayrılan sete eklenir.

2. Seçilen olayların bir dizi köşesi oluştururuz ve onlar için yeni fiyatlar tanımlıyoruz. Vertex'in yeni fiyatı, bu tepe noktasına çeşitli özel köşelerden gelen yolun minimum fiyatıdır. Yeni bir fiyat inşa edildi:

a. Değiştirilmemiş köşe için çeşitli seçilenler için, olayların köşelerinin bir alt kümesi belirlenir.

b. Seçilen alt kümenin her köşesi için, bu yolun fiyatı belirlenir.

c. Minimum fiyat belirlenir. Bu fiyat bir tepe fiyatı olur.

Algoritma iki tür fiyatla çalışır: kaburga fiyatı ve tepe fiyatının fiyatı. Fiyatlar kaburgalar sabit değerdir. Vertic'ların fiyatları sürekli olarak yeniden hesaplanır. Bu fiyatların anlamı değişmiştir. Kenarın fiyatı, yukarıdan üstten üstten üste doğru geçişin fiyatıdır. Ve Vertex'in fiyatı minimum yolun fiyatıdır. Bir diğer önemli not, ön fiyatların yeniden hesaplanması ile ilgilidir. Aslında, yalnızca son adımda ayrılan kümeye eklenen köşe ile ilişkili olan köşeleri için ön fiyatları yeniden hesaplamak mantıklı, çünkü diğer köşeler için fiyat öncesi fiyatı değiştirmenin bir nedeni yoktur.

Tüm fiyatların (örneğin, yol veya seyahat pedleri) olumsuz olmadığı bilinmektedir. Tüm yolun en küçük maliyetini 1-\u003e I için i \u003d 1. n (n2) sırasında n.

Algoritmanın çalışma sürecinde, bazı şehirler izole edilecektir (başlangıçta - sadece şehir 1, hepsi sonunda). Burada:

her özel şehir için I için, yolun en düşük maliyeti 1-\u003e Ben depolanır; Minimumun sadece özel şehirler aracılığıyla geçen yolda elde edildiği bilinmektedir;

tüm karşılıksız şehir için, 1-\u003e Benin en küçük maliyeti, yalnızca vurgulanan şehirlerin ara sıra kullanıldığı yerlerde saklanır.

Birçok özel şehir, aşağıdaki açıklamaya dayanarak genişlemektedir: eğer kullanılmayan tüm şehirler arasında, depolanan numaranın minimum olduğu birini almak için, bu sayı gerçek en küçük değerdir. Aslında, daha kısa bir yol olmasına izin verin. Bu yoldaki ilk ilahiyatı düşünün - yoldan önce yol daha uzundur! (Burada fiyatların olumsuzluğu yoktur.)

Seçilen şehri özel olarak ekleyerek, sıradışı şehirler için depolanan bilgileri ayarlamamız gerekir. Aynı zamanda, yalnızca yeni şehrin son nakil noktası olduğu yolları göz önünde bulundurmak yeterlidir ve yeni bir şehrin minimum maliyetini zaten bildiğimiz için yapımı kolaydır.

Başka bir deyişle, V'nin her bir köşesi, etiketle karşılaştırılabilir - bu tepeden A'ya bilinen minimum mesafe. Algoritma adım adım atıyor - her adımda "bir tepe noktasını ziyaret ettiğini ve etiketleri azaltmaya çalışır. Tüm köşeler ziyaret edildiğinde algoritmanın çalışması tamamlanır.

Başlatma. Vertex'in kendisinin etiketi a. Eşit güvenir 0 , Köşelerin geri kalanının etiketleri - sonsuzluk. Bu, mesafeden uzaklıkları yansıtır. a. Diğer köşelerde bilinmeyen. Grafiğin tüm köşeleri evren olarak işaretlenmiştir.

Adım algoritması. Tüm köşeler ziyaret edilirse, algoritma tamamlanır. Aksi takdirde, Vertex henüz ziyaret edilmedi uminimum bir etikete sahip olmak. Her türlü rotayı görüyoruz. u Bu son maddedir. Üste bağlı ayetler u Kaburga, hadi bu tepe sahasının komşularını arayalım. Her komşu için, mevcut işaretin toplamına eşit yeni bir yol uzunluğu düşünün u ve kaburga bağlanma uzunluğu u Bu komşu ile. Elde edilen uzunluk, komşunun etiketinden daha azsa, bu uzunluğu etiketi değiştirin. Tüm komşuları inceledi, üstü işaretle u Ziyaret edildi ve bir adım tekrarla.

DAEKSTRA algoritmundan bu yana, en kısa yolun en küçük değerlendirmesiyle üstü işleme koyma hakkını seçerse, açgözlü algoritmaları ifade ettiği söylenebilir.

Daekstra Algoritması'nın çalışmalarının şemasını daha ayrıntılı olarak tanımlıyoruz.

Algoritma, her biri her biri üç dizi N (\u003d ağ köşesi sayısı) kullanır. İlk dizisi A, iki değeri olan etiketleri içerir: 0 (Vermex henüz kabul edilmez) ve 1 (zirve zaten dikkate alınmıştır); İkinci dizi B mesafeleri içerir - karşılık gelen tepeye gelen akımın en kısa yarışları; Üçüncü dizi C, köşelerin sayısını içerir - [k] ile K-TH elemanı, VI'daki VI'dan en kaydacı en azından kaydacı yolda bir dizi cilt tepe noktası var. Matris Mesafeleri D Doug D'nin uzunluğunu ayarlar; Böyle bir yay yoksa, d "makine sonsuzluğuna" eşit, büyük bir sayı B'ye atanır.

Şimdi tarif edebilirsiniz:

1. (Başlatma). 1 ila n arasındaki döngüde bir sıfır dizisini doldurun; C dizisini doldurun c; Matris D'nin i-th satırını d dizisine aktarmak için, a [i]: \u003d 1; C [i]: \u003d 0 (i - Başlangıç \u200b\u200bköşesinin sayısı)

2. (Paylaşılan Adım). En azından işaretsiz (yani) arasında (bir [k] \u003d 0); J dizininde minimum elde edilmesine izin verin, yani. B [j]<=B [k] Затем выполняются следующие операции: A [j]: =1; если B [k] >B [j] + d, daha sonra (b [k]: \u003d b [j] + d; c [k]: \u003d j) (Durum, VI. VK'nın VI. VI. VK vk'ten daha uzun olduğu anlamına gelir. . (Bütün bir [K] işaretlenirse, VI'dan VK'tan gelen yol uzunluğu b [k] 'ye eşittir. Şimdi en kısa yolda bulunan köşeleri listelemek gerekir).

3. (Cevap Verme). (VI ila VK arasındaki yol, aşağıdaki prosedürün ters sırasına göre verilir :)

2. z notu;

3. z: \u003d c [z]. Z \u003d O ise, sonra son, aksi takdirde 3.2'ye gidin.

Algoritmayı gerçekleştirmek için n elementlerin bir dizisini görüntülemeniz gerekir, yani. Defister algoritması ikinci dereceden bir karmaşıklığa sahiptir: O (N2).

Aşağıda, Deiquistra algoritmasının bir blok diyagramıdır (bkz. Şekil 2).

İncir. 2. Blok Şeması Daekstra Algoritması

Algoritmanın başlangıcında, ilk köşe için mesafe sıfır olarak kabul edilir ve diğer tüm mesafeler büyük bir pozitif sayı ile doldurulur (bu, sütundaki maksimum yol ortaya çıkıyor). Bayrak dizisi sıfırlarla doldurulur. Ana döngü daha sonra başlatılır.

Döngünün her adımında, minimum mesafeye ve eşit sıfır bayraklı bir köşe arıyoruz. Sonra bayrağı 1 olarak ayarladık ve komşu köşeleri onunla kontrol ettik. Bu, mevcut köşeye olan mesafenin miktarından daha fazla mesafeye ve kaburganın uzunluğundan daha sonra azaltın. Tüm köşelerin bayrakları 1'e eşit olduğunda döngü tamamlanır.

DAEKSTRA algoritmasının en kısa yolunu bulma görevini çözün.
X0'den X7'den en kısa yolu bulun. Sayı, Maliyet Matrisinin unsurları tarafından belirlenir

Bu grafiği inşa et


X0 elemanı ile başlayalım ve bir etiket 0 atıyoruz, tüm komşularını düşünün, çünkü Hala not yok, bunlara karşılık gelen uzunlukları atarsınız:


Tüm komşular X0 olarak kabul edilir, işaret ediyoruz ve X1'in tepesine gidiyoruz. Komşuları X0, X2, X4, ancak X0 işaretli, düşünmeyin. X2 için: , Etiketi bırak.

X4 için: Etiketi değiştirme. X1'in tüm komşuları göz önünde bulundurulur, işaret ediyoruz


X2'nin tepesine gidin. Komşuları X0, X1, X3, X4, X5, X6, ancak X0, X1 işaretli, onları düşünmeyin.
X3 için: , Etiketi bırak.
X5 için: Etiketi değiştirme.
X4 için: , Etiketi bırak.
X6 için: Etiketi değiştirme.
X2'nin tepesinin tüm komşuları dikkate alınır, işaret ediyoruz.


Üst x3'e gidin. Komşuları X0, X2, X6, ancak X0, X2 işaretli, onları düşünmeyin.
X6 için: , Etiketi bırak.
X3'ün tepesinin tüm komşuları dikkate alınır, işaret ediyoruz.


X4'in tepesine gidin. Komşuları X1, X2, X5, X7, ancak X1, X2 işaretli, onları düşünmeyin.
X5 için: Etiketi değiştirme.
X7 için: Etiketi değiştirme.
X4'ün tepesinin tüm komşuları göz önünde bulundurulur, işaret ediyoruz.


X5'in tepesine gidin. Komşuları X2, X4, X6, X7, ancak X2, X4 işaretlendi, onları düşünmeyin.
X6 için: , Etiketi bırak.
X7 için: , Etiketi bırak.
X5'in tepesinin tüm komşuları göz önünde bulundurulur, işaret ediyoruz.


X6'nın tepesine gidin. Komşuları X2, X3, X5, X7, ancak X2, X3, X5 işaretli, onları düşünmeyin.
X7 için: , Etiketi bırak.
X6'nın tepesinin tüm üstleri dikkate alınır, işaret ediyoruz. Ve kalan X7'yi etiketledik, tüm köşeler göz önünde bulundurulur.


Sonuç: X7'deki en kısa yolu X7'de 101 uzunluğuna sahiptir, bu yol: X7-X4-X1-X0.

5.4.3. En Kısa Yolun Mücadelesi ve Kararının Daekster Algoritması

Orgraf ayarlasın G.(V., E.), her bir ark ile sayıya doğrultusunda
aranan arc uzunluğunda.

Tanım. Lena Yol, bu yolu oluşturan ark uzunluklarının toplamı olarak adlandırılır. En kısa yolun göreviöyle görünüyor.

Seçenek 1. En kısa yolların uzunluklarını (minimum uzunluk yolları) ve yolların sabit tepesinden s. grafiğin diğer tüm köşelerine.

Seçenek 2. En kısa yolların uzunluğunu ve bu grafiğin köşelerinin tüm çiftleri arasında kendilerini bulur.

Sütunda negatif yaylar varsa, görevin çözümleri olmayabilir (anlamını kaybeder). Bunun nedeni, negatif uzunluğun konturunun sütunda bulunabileceği gerçeğinden kaynaklanmaktadır. Negatif uzunluk devrelerinin varlığı, yol uzunluğunun eşit yapıldığı anlamına gelir.
. Ve negatif uzunluk devreleri yoksa, en kısa yollar var ve en kısa yol basit bir zincirdir.

En kısa yol varsa, bunlardan herhangi biri ise, aynı zamanda ilgili köşeler arasındaki en kısa yoldur.

Algoritma Daekstra en kısa yolun sorunu çözme.

Algoritma, pozitif uzunluktaki yaylarla çalışır ve sabit köşeden en kısa yolları tanımlar. s. grafiğin diğer tüm köşelerine. Bu köşeleri belirtir v. 1 , v. 2 ,…, v. n. .

Tanım. Hadi üstü arayalım u Üste daha yakın yatmak s.üstten v.En kısa yolun uzunluğu s. önce u En kısa yolun uzunluğundan daha az s. önce v.. Üstleri söyleyeceğiz u ve v. eşit Üstten s.En kısa yolların uzunlukları s. önce u ve s. önce v. eşleştir.

Daekstra algoritması, grafiğin köşelerinin tepesine yakınlık anlamında sürekli olarak gerçekleştirir. s. ve aşağıdaki temel ilkelere dayanarak.

ARC'nin uzunlukları pozitif sayılarsa, o zaman

    en yakın K. s. Üst - o kendisi. En kısa yolun uzunluğu s. önce s. 0'a eşit;

    en yakın K. s. tepe noktası s., Yalanlar s. Bir ark  bir ark  en kısa süren kemerlerin en kısa süresinde s.;

    en kısa yolun herhangi bir orta kısmının s. Bazı köşelere v. K'ye daha yakın yatıyor. s.son tepeden daha v.;

    bir sonraki sipariş edilen bir tepe noktasının en kısa yolu yalnızca önceden sipariş edilen zirvelerden geçebilir.

Algoritma zaten zirveleri sipariş etsin v. 1 , v. 2 v. k. . Belirtmek
,
En kısa yolun uzunluğu v. bEN. .

Setin köşelerinden birinde başlayan kaynak grafiğin tüm yaylarını düşünün.
Ve başka bir sıralanmamış köşede biter. Her bir ark için, örneğin
, Toplamı hesaplarım
. Bu miktar, yolun uzunluğuna eşittir. s. içinde y.hangi köşede v. bEN. Bir penultimate üst ve yolun yolu var. s. içinde v. bEN. - Bağlantılan tüm yolların en kısa s. ve v. bEN. .

Bu, tüm yolların en belirlenmiş uzunluklarıdır. s. Yalnızca köşelerin ara verilerin olduğu henüz sipariş verilmemiştir. k. En yakın K. s.. Bu yolların en kısa süresinin üstüne bitmesine izin verin w.. Sonra w. ve bir
K.'ye yakınlıkla s. Vertex.

Teknik olarak DAEKSTRA algoritması üzerindeki eylemler, köşe işaretleme aparatı kullanılarak gerçekleştirilir. Tagitth v. Nasıl olduğunu gösterir
. Herhangi bir etiket, bir yolun uzunluğuna eşit bir sayıdır. s. önce v.. Etiketler geçici ve sabitlere ayrılır. Her adımda, sadece bir etiket sabit olur. Bu, değerinin karşılık gelen tepe için en kısa yolun uzunluğuna eşit olduğu ve bu tepex'in kendisi sipariş edildiği anlamına gelir. Bir sonraki sipariş edilen verterin sayısı harf tarafından gösterilir. r.

Algoritmanın açıklaması.

Aşama 1. (İlk kurulum). Koymak
Ve bu etiket sabitini düşünün. Koymak
,
Ve bu işaretleri geçici olarak düşünün. Koymak
.

Adım 2. (Paylaşılan adım). Tekrar eder n. grafiğin tüm köşeleri sipariş edildikten sonra.

Geçici bir işareti yeniden hesapla
Tüm düzensiz köşeler v. bEN. üstten ayrılan bir yay içeren r, Kurallara göre

En az zaman etiketi ile üst seçin. Böyle birkaç köşe varsa, herhangi birini seçin.

İzin vermek w.- Minimum zaman etiketi ile üst. Etiketlemek
sabit ve koymak
.

DAEKSTRA algoritmasının adımları, her sütunun grafiğin tepesine karşılık gelen masada uygun bir şekilde çizilir. Tablonun satırları, genel adımın tekrarı ile ilgilidir.

Misal. Şekil 2'deki grafik için. 4. Vertic'tan en kısa yolları bulun
grafiğin diğer tüm köşelerine. Kaburgalar aynı uzunluktaki iki çok yönlü yay anlamına gelir.

Karar. Sekmesinde. Her adımda 1 kaydedilmiş vertex etiketleri. Kalıcı etiketler "+" ile işaretlenmiştir. Etiketlerin nasıl hesaplandığını ayrıntılı olarak tanımlayalım.

    Vertex 1 yaylarından, bu köşelerin etiketlerini hatırlatan ve masanın ikinci dizesini doldurun.

Vertex 6'nın üst kısmı sabit olur,
.

    Vertex 6 yaylarından hala sırasız köşeler 2, 5, 8, 9. zaman etiketlerini yeniden hesaplar.

3 satır tabloyu doldurun. Zaman etiketlerinin minimum 3'tür (üst etiket 9),
.

    Vertex 9 yaylarından, hala sırasız köşeleri 5, 8, 11, 12.

Tablonun dördüncü satırını doldurun. Bu doğrultunda, iki köşe  2 ve 12, 4. birinci sıraya eşit en az zaman etiketlerine sahiptir, örneğin Vertex 2. Daha sonra ilk 12, bir sonraki adımda sipariş edilecektir.

tablo 1

Yani,
.

    Top 2'den, hala düzensiz köşelerde 3, 4, 5. bu köşelerin geçici işaretlerini hatırlatan yaylar vardır.

5 masa satırını doldurun. En az zaman etiketi 4'tür (Vertex Etiketi 12),
.

Masanın 6 satırını doldurun. En az zaman etiketi 5'dir (üst etiket 5),
.

Tablonun 7 dizesini doldurun. Vertex 8'in sabit bir etiketi haline gelir (5'e eşittir),
.

İlk 11 sipariş edildi.

    Vertix 11 yaylarından, düzensiz köşelerdeki 7, 10. Bu köşelerin zaman işaretlerini hatırlatan.

İlk 4 sabit bir etiket alır.

    Deredilmemiş Vertices 3, 7. Zaman etiketlerini yeniden hesaplayın

Vertex 3'ü düzenleyin.


12 masa satırını doldurun. Bu adımda, son düzensiz Vertex 10'u sipariş ediyoruz.

En kısa yollar ağacı oluşturmak.

En kısa yolların ağacı, üstte köklü odaklı bir ağaçtır. S. . Bu ağaçtaki tüm yollar bu grafik için en kısa.

En kısa yol ağacı tabloya dayanır, üst, köşe üstü üzerinde sabit etiketler aldıkları sırayla açılır. Ağaçtaki ilki kök üzerinde döner - köşe S. .

Örneğimiz için en kısa yol ağacı inşa ediyoruz.

İlk önce, ağacın içindeki kökleri açarız - Vertex 1. Arc, bir ağaca (1.6) döndürülür. Bir sonraki, Vermex 9'a, 3'e eşit olan en kısa yolun uzunluğu sipariş edildi. Üçüncü satırda,
. Sonuç olarak, Vertex 6, Vertex 9. için en kısa yolun son tepesidir. Odun arkını (6.9) uzunluk 1.

İlk 2, 4'e eşit en kısa yolun uzunluğu ile sipariş edildi. Bu sayıya, ilk defa doldurulmuş olan üçüncü satırda belirdi
. Sonuç olarak, ikinci köşedeki en kısa yol, ARC (6.2) boyunca geçer. 2 uzunluğunun arkını (6.2) açarız.

Sonra ilk 12'ye sipariş edildi,
. 4 numaralı numara, dördüncü satırda, doldurulmuş olan
. Ağaç, 1 uzunluğunun bir yayını (9.12) içerir. En kısa yolların toplam ağacı, Şekil 2'de gösterilmiştir. beş.

Sütundaki negatif yay varsa, Deiquist algoritması yanlış olabilir. Yani, üstten en kısa yolları arıyorum s. \u003d 1, Şekil 2'deki grafik için. 6, algoritma ilk önce Vertex 3, sonra Vertex 2'yi sipariş etti ve işi bitirdi. Bu durumda, ilk 3'e kadar olan bu en kısa yol, DAEKSTRA algoritması açısından,  bir ark (1.3) uzunluğu 3'tür.

Aslında, Vertex 3'ün en kısa yolu, yayların (1.2) ve (2.3), bu yolun uzunluğu 5 + (- 3) \u003d 2'dir.

Negatif uzunlukta -3'ün bir ark (2.3) varlığı nedeniyle, aşağıdaki temel ilkeler rahatsız edildi:

    en yakın K. s. Tepe, iki yaydan bir mesafede, birinden değil;

    en kısa yolun 1-2-3'ünün (Vertex 2) ara ürününün, (5'lik bir mesafeden), yolun 3'ün son tepesinden (5'lik bir mesafede) daha ileride yatar.

Sonuç olarak, negatif uzunluk arkının varlığı, en kısa yolun sorununu çözer ve DAEKSTRA algoritması yerine daha karmaşık algoritmaların kullanılmasını gerektirir.

Konuya devam ediyor:
Akıllı telefon

Minitool Güç Veri Kurtarma Serbest Sürümü, verileri kurtarmak için tasarlanmış kullanımı kolay bir programdır. Minitool Güç Veri Kurtarma ile çalışmak için ...