使用Eppstein算法找到k条最短路径


16

我试图找出如何路径图形P(G)在此根据Eppstein的算法纸作品,以及如何我可以重建k从最短路径s到t与相应的堆结构H(G)。

至今:

out(v)包含离去一个顶点的所有边v中的曲线图G其不是在最短路径的一部分G。使用此边缘而不是最短路径上的边缘时,它们由称为的“时间浪费”按堆排序δ(e)。通过应用Dijkstra,我找到了从到每个顶点的最短路径t。

我可以通过边的长度+(头顶点的值(有向边指向的位置)-尾点的值(有向边开始的位置)来计算,如果>0,则为不在最短路径上,如果=0,则在最短路径上。

现在我建立一个2最小堆Hout(v)由heapifying边集out(v)根据它们的δ(e)对于任何v∈V,其中,所述根outroot(v)只有一个孩子(=子树)。

为了构建 i插入ö ü 吨- [R ö ø 吨(v )在ħ Ť(Ñ Ë X 吨Ť(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

借助我可以构建一个称为D (G )的DAG,其中包含一个顶点,该顶点来自H T(v )的每个带*标记的顶点,以及每个来自H o u t(v )的非根顶点。HG(v)D(G)∗HT(v)Hout(v)

的根在d (ģ )被称为ħ (v )和它们连接到它们所属的顶点到根据ö û 吨(v )由一个“映射”。HG(v)D(G)h(v)out(v)

到目前为止,一切都很好。

纸说我可以建立通过插入根- [R = - [R (小号)和该连接到ħ (小号)由inital边缘与δ (ħ (小号))。D (G )的顶点在P (G )中相同,但未加权。边缘有长度。然后,对于每个有向边(Û ,v )∈ d (ģ )P(G)r=r(s)h(s)δ(h(s))D(G)P(G)(u,v)∈D(G)在相应的边缘创建和由加权δ (v )- δ (Û )。它们称为堆边缘。然后,对于每个顶点v ∈ P (g ^ ),其表示不能在最短路径连接一对顶点的边缘ü和瓦特,“交叉边缘”是从创建v到ħ (瓦特)在P (g ^ )具有长度δ (h (wP(G)δ(v)−δ(u)v∈P(G)uwvh(w)P(G)。P (G )中的每个顶点的向外度最大为 4。δ(h(w))P(G)4

假设从 r开始的 P (G )路径是 G中s - t路径之间的一一对应的长度。P(G)rstG

最后,将构建一个新的有序的4堆堆。每个顶点对应于以r (R )为根的P (G )中的路径。任何顶点的父级都少了一条边。顶点的权重是相应路径的长度。H(G)P(G)r

为了找到最短路径,我使用BFS到P (G )并通过使用H (G )将搜索结果“转换”为路径。kP(G)H(G)

不幸的是,我不了解如何“读取” 然后通过H (G ) “翻译”它以接收k条最短路径。P(G)H(G)k


6
您是否在ics.uci.edu/~eppstein/pubs/p-kpath.html中检查了各种实现?
— Radu GRIGore 2011年

Answers:


25

自从我写那本书以来已经足够长的时间了,到目前为止,我对其中内容的解释可能比其他任何读者都了解得多。不过:

我相信,您要查找的描述是引理5的证明的最后一段。基本上,P(G)中的某些边缘(“交叉边缘”)对应于G中的边线(即,与最短路径树分叉)。G中的路径是通过沿着最短路径树到达第一个侧轨的起始顶点,跟随侧轨边缘本身,再次遵循最短路径树到下一个侧轨的起始顶点等而形成的。


1
顺便提一下,该算法最近似乎表现不佳。可以在这里
— 卡洛斯·利纳雷斯·洛佩斯

大卫,我真的需要用Java最好的算法来实现您的算法。您能指出我在哪里可以找到一个人吗?
— 蒂娜·J

1
我知道的实现是从ics.uci.edu/~eppstein/pubs/p-kpath.html的底部链接的,但是我最近没有检查过异地的实现,因此可能存在一些死链接。
— 大卫·埃普斯坦

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.