Eppstein Algoritması ile En Kısa Yolları Bulmak


16

Ben anlamaya çalışıyorum nasıl Yolu Grafik P(G) bu Eppstein en Algoritma göre kağıt işlerinde ve nasıl tekrar oluşturabilir k gelen kısa yolları s için t tekabül yığın inşaat ile H(G) .

Şimdiye kadar:

out(v) bir köşe terk eden tüm kenarları içerir bir grafik bir kısa yolun bir parçası değildir . En kısa yollardaki kenar yerine bu kenarı kullanırken adı verilen "zaman kaybı" ile yığın halinde sıralanırlar . Uygulayarak Dijkstra I her tepe için en kısa yollar bulmak .vGGδ(e)t

I yönlendirilmiş kenar) işaret baş köşeye (kenar + (değerinin uzunluğu alarak bu hesaplayabilir -. Yönlendirilen kenar başlıyor kuyruk tepe noktasına (değeri), bu ise olarak en kısa yolda değil, ise en kısa yoldadır.>0=0

Şimdi oluşturmak 2-Min-Yığın kenarlarının grubu heapifying ile bunların uygun herhangi biri için kökü, sadece var bir çocuk (= alt ağaç).Hout(v)out(v)δ(e)vVoutroot(v)

İnşa etmek için I eklemek içinde , terminal tepe başlayarak . Eklerken her zaman bir tepe noktasına bir şekilde dokunulursa ile işaretlenir .HT(v)outroot(v)HT(nextT(v))t

Şimdi oluşturabilir geri kalanını sokulmasıyla içinde . Her köşe ya da içeren çocukları ve den ya da 0 , filtrenin birinci ve 2 saniye ile ve 3-yığın.HG(v)Hout(w)HT(v)HG(v)2HT(v)1Hout(w)02

İle I inşa bir DAG adlandırılan D ( G ) her biri için bir köşe ihtiva * den imli tepe H T ( v ) ve kök olmayan tepe için gelen lH O u t ( v ) .HG(v)D(G)HT(v)Hout(v)

Kökleri içinde D ( G ) olarak adlandırılır h ( v ) ve uygun ait oldukları vertices bağlı olduğu O u t ( v ) bir "harita" ile.HG(v)D(G)h(v)out(v)

Çok uzak çok iyi.

Kağıt Yapılmasına söylüyor bir kök sokulmasıyla r = r ( ler ) ve bu bağlantı saat ( ler ) ile bir açmasının kenarla ö ( h ( s ) ) . D ( G ) ' nin köşeleri P ( G )' de aynıdır ancak ağırlıklandırılmamıştır. Kenarların uzunlukları vardır. Ardından her bir yönlendirilmiş kenar için ( u , v ) D ( G )P(G)r=r(s)h(s)δ(h(s))D(G)P(G)(u,v)D(G) deki karşılık gelen kenarlar δ ( v ) - δ ( u ) tarafından oluşturulur ve tartılır . Bunlara Öbek Kenarları denir. Daha sonra her bir köşe için v P ( G ) köşe bir çift bağlantı bir kısa yolu bir kenar temsil eder, u ve W , "çapraz kenarları" oluşturulur v için h ( ağırlık ) içinde p ( G ) bir uzunluğa sahip olan δ ( h ( wP(G)δ(v)δ(u)vP(G)uwvh(w)P(G) . P ( G ) ' deki her tepe noktasınınçıkış derecesi sadece 4 maks.δ(h(w))P(G)4

başlangıç malzemesi 'nin yolları r arasında bire-bir uzunlukta yazışma gerekiyordu s - T de -paths G .P(G)rstG

Sonunda 4-Heap sipariş edilen yeni bir yığın oluşturulur. Her tepe noktası, p ( G ) ' de r'ye dayanan bir yola karşılık gelir . Herhangi bir tepe noktasının üst öğesinin bir daha az kenarı vardır. Bir tepe noktasının ağırlığı, karşılık gelen yolun uzunluğudur.H(G)P(G)r

En kısa yollarını bulmak için BFS'yi P ( G ) ye kullanarak ve arama sonucunu H ( G ) kullanarak yollara "çevirir" .kP(G)H(G)

Ne yazık ki, "okuma" nasıl anlamıyorum ve ardından aracılığıyla "tercüme" H ( G ) almak üzere k kısa yolları.P(G)H(G)k


6
İcs.uci.edu/~eppstein/pubs/p-kpath.html adresindeki çeşitli uygulamaları kontrol ettiniz mi?
Radu GRIGDaha fazla

Yanıtlar:


25

Şimdiye kadar, içinde ne olduğunu yorumlamamın muhtemelen diğer okurlardan daha fazla bilgilendirilmediğini yazdığımdan beri yeterince uzun oldu. Yine:

Aradığınız açıklamanın Lemma 5'in ispatının son paragrafı olduğuna inanıyorum. Temel olarak, P (G) ("çapraz kenarlar") 'daki bazı kenarlar G'deki yan çizgilere (yani kenarlar) en kısa yol ağacından sapma). G'deki yol, ilk yan yolun başlangıç ​​tepe noktasına en kısa yol ağacını takip ederek, yan yol kenarının kendisini izleyerek, bir sonraki yan yolun başlangıç ​​tepe noktasına kadar en kısa yol ağacını takip ederek oluşur.


1
Bir yan not olarak, bu algoritma son zamanlarda daha iyi performans göstermiştir. Ayrıntılar burada
Carlos Linares López

David, gerçekten algoritmanızın bir uygulamasına ihtiyacım var, en iyisi Java. Bana nerede bulabileceğimi gösterebilir misin?
Tina J

1
Bildiğim uygulamalar ics.uci.edu/~eppstein/pubs/p-kpath.html altından bağlantılıdır - ancak son zamanlarda tesis dışı olanları kontrol etmedim, bu yüzden bazı çıkma noktaları olabilir.
David Eppstein

Teşekkürler. Ama daha da önemlisi, algoritmanızın tam bir sahte kodunuz var mı?
Tina J

@DavidEppstein Dijkstra'nın Wikipedia'dakine benzer bir şey: en.wikipedia.org/wiki/K_shortest_path_routing
Tina J

4

Eppstein'ın algoritması için sahte kod (ve yazarların tembel versiyonu) şu şekilde verilir: VM Jiménez, A. Marzal, Eppstein'ın en kısa yol algoritmasının tembel bir versiyonu, içinde: 2. Uluslararası Deneysel ve Verimli Algoritmalar Çalıştayı (WEA '03), in: Bilgisayar Biliminde Ders Notları, cilt. 2647, Springer, 2003, s. 179–190. https://pdfs.semanticscholar.org/3a31/5a14a2fc773d2d800186121905016de31705.pdf

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.