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)v∈Voutroot(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)v∈P(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.