Eppsteinのアルゴリズムを使用してk個の最短パスを見つける


16

この論文のエップシュタインのアルゴリズムによるパスグラフ仕組みと、対応するヒープ構造してからへの最短パスを再構築する方法を理解しようとしています。P(G)kstH(G)

これまでのところ:

out(v)は、最短パスの一部ではないグラフ頂点を残すすべてのエッジが含まれます。最短経路上のエッジの代わりにこのエッジを使用すると、と呼ばれる「時間の無駄」によってヒープ順に並べられます。ダイクストラを適用することにより、からすべての頂点への最短経路を見つけます。vGGδ(e)t

Iは、エッジの長さ+(頭頂点(有向枝が指している場合)の値を取ることによって、これを計算することができる- 。有向エッジが開始されるテール頂点()の値を、これがある場合、それ場合、最短経路上にありません>0=0、それは最短パス上にあります。

今は2分ヒープ構築Hout(v)のエッジのセットをheapifyingによってout(v)、それらに従ってδ(e)任意用vVルート、outroot(v)は子(=サブツリー)が1つしかありません。

構築するために IインサートO U T R O O T V H TN E X T TV 端子頂点から始まるT。挿入中に頂点が何らかの方法でタッチされるたびに、*のマークが付けられますHT(v)outroot(v)HT(nextT(v))t

今は構築することができるの残りの部分を挿入することによって、H O U TW H TV 。内のすべての頂点H Gは、V のいずれか含ま2から子供H TV 1からH O U TW 又は0第から2秒〜を3ヒープです。HG(v)Hout(w)HT(v)HG(v)2HT(v)1Hout(w)02

Iを構築することができるDAGと呼ばれるD G ごとに頂点を含有*から-marked頂点H TV と各非ルート頂点に対するからH O U TV HG(v)D(G)HT(v)Hout(v)

におけるD Gはと呼ばれ、H V 、それらは、それらがに応じに属する頂点に接続されているO U T V 「マッピング」によって。HG(v)D(G)h(v)out(v)

ここまでは順調ですね。

論文では、ルートr = r s を挿入し、これをδ h s )を持つ初期エッジでh s )に接続することにより、構築できると述べています。D G の頂点はP G と同じですが、重み付けされていません。エッジには長さがあります。各有向辺のU V D G P(G)r=r(s)h(s)δ(h(s))D(G)P(G)(u,v)D(G)対応するエッジによって作成され、重み付けされδ V - δ U 。それらはヒープエッジと呼ばれます。各頂点のためのV P G の頂点の対結ぶ最短経路ではないエッジを表し、UおよびWは、「クロスエッジは」から作成されたVH W におけるP G の長さを有しますδ h wP(G)δ(v)δ(u)vP(G)uwvh(w)P(G)P G )のすべての頂点には、最大 4つの出て行く程度しかありません。δ(h(w))P(G)4

rから始まる P G のパスは、 G のs - t-パス間 1対1の長さの対応であると想定されています。P(G)rstG

最後に、4ヒープ注文した新しいヒープが構築されます。各頂点は、rをルートとするP G )のパスに対応します。頂点の親のエッジは1つ少なくなります。頂点の重みは、対応するパスの長さです。H(G)P(G)r

最短パスを見つけるには、BFS to P G を使用し、H G を使用して検索結果をパスに「変換」します。kP(G)H(G)

残念ながら、を「読み取り」、それからH G を「翻訳」してk個の最短パスを受け取る方法を理解できません。P(G)H(G)k


回答:


25

私がそれを書いてから十分に長いので、今ではそこにあるものの私の解釈はおそらく他のどの読者のものよりも多くは知らされていません。それにもかかわらず:

探している説明は補題5の証明の最後の段落だと思います。基本的に、P(G)のエッジ(「クロスエッジ」)の一部はGのサイドトラック(つまり、最短パスツリーから分岐します)。Gのパスは、最初のサイドトラックの開始頂点までの最短パスツリー、サイドトラックエッジ自体、次のサイドトラックの開始頂点までの最短パスツリーなどによって形成されます。


1
副次的な注意事項として、このアルゴリズムは最近性能が向上したようです。詳細はこちら
カルロスリナレスロペス

デビッド、私は本当にあなたのアルゴリズムの実装が必要です。Javaで最高です。見つけられる場所を教えていただけますか?
ティナJ

1
私が知っている実装は、ics.uci.edu / 〜eppstein / pubs / p - kpath.htmlの下部からリンクされていますが、最近オフサイトの実装をチェックしていないため、いくつかのデッドリンクがあるかもしれません。
デビッドエップスタイン

ありがとう。しかし、もっと重要なことは、どこかで利用可能なアルゴリズムの完全な擬似コードを持っているということですか?
ティナJ

@DavidEppstein Wikipediaのダイクストラのものに似たもの:en.wikipedia.org/wiki/K_shortest_path_routing
ティナJ

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.