ईपस्टीन के एल्गोरिथ्म के साथ सबसे छोटा पथ ढूँढना


16

मैं यह पता लगाने की कोशिश कर रहा हूँ कैसे पथ ग्राफ़ Eppstein के एल्गोरिथ्म के अनुसार इस में कागज काम करता है और कैसे मैं फिर से संगठित कर सकते हैं कश्मीर से कम से कम पथ रों को टी इसी ढेर निर्माण के साथ एच ( जी )P(G)kstH(G)

अब तक:

एक शीर्ष छोड़ने सभी किनारों शामिल v ग्राफ में जी जिसमें एक कम से कम पथ का हिस्सा नहीं हैं जी । वे "समय की बर्बादी" कहा जाता द्वारा ढेर-आदेश दिया गया हैं δ ( ) पर उसके स्थान पर एक कम से कम पथ पर एक के इस बढ़त का उपयोग कर। दिज्क्स्त्र को लागू करने से मुझे टी से हर शिखर पर सबसे छोटा रास्ता मिल जाता हैout(v)vGGδ(e)t

मैं किनारे की लंबाई + (सिर के शीर्ष का मान (जहां निर्देशित किनारा इंगित कर रहा है) का मान लेकर इसकी गणना कर सकता हूं - पूंछ का शीर्ष (जहां निर्देशित किनारा शुरू हो रहा है) का मान। अगर यह है। कम से कम रास्ते पर नहीं है, अगर यह है>0सबसे छोटे रास्ते पर है।=0

अब मैं का निर्माण एक 2-मिन-ढेर किनारों के सेट heapifying द्वारा यू टी ( v ) उनके के अनुसार δ ( ) किसी के लिए वी वी , जहां जड़ यू टी आर t ( v ) का केवल एक बच्चा (= सबट्री) है।Hout(v)out(v)δ(e)vVoutroot(v)

आदेश बनाने के लिए मैं डालने यू टी आर टी ( v ) में एच टी ( एन एक्स टी टी ( v ) ) टर्मिनल शिखर में शुरुआत टी । हर एक शीर्ष किसी भी तरह छुआ, जबकि यह डालने एक के साथ चिह्नित है है *HT(v)outroot(v)HT(nextT(v))t

अब मैं निर्माण कर सकते हैं के बाकी डालने से एच यू टी ( डब्ल्यू ) में एच टी ( v ) । में हर शिखर एच जी ( v ) या तो शामिल 2 से बच्चों को एच टी ( v ) और 1 से एच यू टी ( डब्ल्यू ) या 0 पहली और से 2 दूसरे से और एक 3-ढेर।HG(v)Hout(w)HT(v)HG(v)2HT(v)1Hout(w)02

साथ मैं निर्माण कर सकते हैं एक DAG बुलाया डी ( जी ) प्रत्येक के लिए एक शीर्ष युक्त * से -marked शिखर एच टी ( v ) और प्रत्येक गैर-रूट शिखर के लिए से एच यू टी ( v )HG(v)D(G)HT(v)Hout(v)

की जड़ों में डी ( जी ) कहा जाता है ( v ) और वे अनुसार करने के लिए कोने वे हैं से जुड़े हैं करने के लिए यू टी ( v ) एक "मानचित्रण" द्वारा।HG(v)D(G)h(v)out(v)

अब तक सब ठीक है।

कागज कहता है कि मैं निर्माण कर सकते हैं एक रूट डालने से आर = आर ( रों ) और को यह जोड़ने ( रों ) के साथ एक inital किनारे से δ ( ( रों ) )D ( G ) के कोने P ( G ) में समान हैं, लेकिन वे भारित नहीं हैं। किनारों की लंबाई होती है। फिर प्रत्येक निर्देश दिया बढ़त के लिए ( यू , वी ) डी ( जी )P(G)r=r(s)h(s)δ(h(s))D(G)P(G)(u,v)D(G)में इसी किनारों बनाया है और के आधार पर भारित कर रहे हैं δ ( v ) - δ ( यू ) । उन्हें हीप एज कहा जाता है। फिर प्रत्येक शिखर के लिए वी पी ( G ) है, जो कोने की एक जोड़ी जोड़ने बढ़त एक कम से कम पथ में नहीं प्रतिनिधित्व करता यू और डब्ल्यू , "पार किनारों" से बनाई गई हैं वी करने के लिए एच ( डब्ल्यू ) में पी ( G ) लंबाई वाले δ ( ( wP(G)δ(v)δ(u)vP(G)uwvh(w)P(G)δ(h(w)) में प्रत्येक शीर्ष पर केवल 4 अधिकतम की एक आउट गोइंग डिग्री है ।P(G)4

R से शुरू होने वाले P ( G ) के रास्तोंको G में s - t -paths केबीच एक से एक लंबाई के पत्राचार माना जाता है।P(G)rstG

अंत में एक नए ढेर का आदेश दिया गया 4-हीप का निर्माण होता है। में एक पथ के लिए प्रत्येक शीर्ष मेल खाती पी ( G ) पर निहित आर । किसी भी शीर्ष के माता-पिता के पास एक कम बढ़त है। एक शीर्ष का वजन संबंधित पथ का हिस्सा है।H(G)P(G)r

To find the k shortest paths I use BFS to P(G) and "translate" the search result to paths by using H(G).

Unfortunately, I don't understand how I can "read" P(G) and then "translate" it through H(G) to receive the k shortest paths.


6
Did you check the various implementations at ics.uci.edu/~eppstein/pubs/p-kpath.html ?
Radu GRIGore

जवाबों:


25

It's been long enough since I wrote that, that by now my interpretation of what's in there is probably not much more informed than any other reader's. Nevertheless:

I believe that the description you're looking for is the last paragraph of the proof of Lemma 5. Basically, some of the edges in P(G) (the "cross edges") correspond to sidetracks in G (that is, edges that diverge from the shortest path tree). The path in G is formed by following the shortest path tree to the starting vertex of the first sidetrack, following the sidetrack edge itself, following the shortest path tree again to the starting vertex of the next sidetrack, etc.


1
As a side note, this algorithm seems to have been recently outperformed. The details can be found here
Carlos Linares López

David, I really need an implementation of your algorithm, best in Java. Can you point me where I can find one?
Tina J

1
The implementations that I know about are linked from the bottom of ics.uci.edu/~eppstein/pubs/p-kpath.html — but I haven't checked the off-site ones recently so there may be some deadlinks.
David Eppstein

Thanks. But more importantly, do you have a complete pseudo-code of your algorithm available somewhere?
Tina J

@DavidEppstein Something similar to Dijkstra's one at Wikipedia: en.wikipedia.org/wiki/K_shortest_path_routing
Tina J

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.