检索动态图的最短路径


24

我目前正在研究有向图中的最短路径。有许多有效的算法可用于查找网络中的最短路径,例如dijkstra算法或bellman-ford算法。但是,如果图形是动态的,该怎么办?我说动态是指我们可以在程序执行期间插入或删除顶点。我正在尝试找到一种有效的算法,用于在插入边e之后更新从顶点到每个其他顶点u的最短路径,而无需在新图中再次运行最短路径算法。我怎样才能做到这一点?提前致谢。vue

  • 注意:更改可以在算法的第一次迭代后完成
  • 注[2]:两个节点中给出,源和Ť目标。我需要找到这些节点之间的最短路径。当图形更新时,我只需要更新π s t ,这是st之间最短路径。stπ(s,t)st
  • 注意[3]:我只对边缘插入盒感兴趣。

正式定义:给定一个图。定义一个更新操作作为1)的边缘的插入ëë或2)的边缘的氨基酸缺失ëë。目的是有效地找到更新操作后所有对最短路径的成本。有效地,我们的意思至少比每次更新操作后执行All-Pairs-Shortest-Path算法(例如Bellman-Ford算法)更好。G=(V,E)eEeE


编辑:下面是问题的简化版本:

给出了一个加权图,该图由单向边以及两个关键顶点st组成。还给出了候选双向边缘的集合C。我必须建立一个边缘Û v Ç以最小化从距离小号G(V,E)stC(u,v)Cst


更多澄清的问题:路径的端点每次都保持固定?您是否只对边缘插入情况或图形中的任意更改感兴趣?我认为有研究可以回答您的问题,但是不幸的是,我真的不知道在哪里看。通过Google的快速搜索,可以找到这些幻灯片这些幻灯片似乎非常有用。本文为:“动态图上的最短路径”(希望链接起作用)。(u,v)
usul 2012年

Answers:


14

您可能已经注意到的问题是一个相当困难的问题。检查网络会导致一些复杂的实例,您可能不需要这些实例。这是一个解决方案-根据需要(即,您无需从头开始重新计算所有内容)。

对于添加边 -然后使用已经建立的距离矩阵-请执行以下操作:(u,v)

对于每对节点y,检查d x u + c u v + d v y < d x y -可以做到在O n 2)中,因为您正在比较每对节点。xyd((x,u))+c((u,v))+d((v,y))<d((x,y))O(n2)

对于边缘删除的情况:给定已经建立的距离矩阵,则对于每个节点都可以有一个植根于u的最短路径树。如果删除的边e不在那棵树中,则从u到彼此的最短路径不会受到影响-(它们保持不变)。uueu

如果u的最短路径树中,则对于每个节点v,以使最短路径π u v 包括e,路径将发生变化。因此,计算从uv的最短路径。现在,对每个节点重复上一个操作-这不是最佳解决方案。实际上,在最坏的情况下,它渐近地等同于从头开始做每件事,但平均而言会更好。 euvπ(u,v)euv

如果您想获得比此更好的结果,那么请看一下:

  1. Demetrescu,Camil和Giuseppe F.Italiano。“动态所有对最短路径的新方法。” ACM杂志(JACM)51.6(2004):968-992。(可以从Google免费找到)

  2. 或看看这份写得很好的调查


17

您要的问题是众所周知的算法问题。它实际上仍然是开放的,这个问题到底有多难。您也应该知道,这个问题有不同的化身。相反,您要查询的内容通常只返回距离,而您要查询的是实际的最短路径。请注意,这些路径可能已经很长。动态图算法区分仅边缘删除(增量dg算法),仅边缘插入(增量dg算法)和边缘插入和删除(全动态dg算法)。因此,您对增量算法感兴趣。

AJed帖子中提到的算法有些过时。Thorup有更新的结果,请参见第8页的简短调查。Thorup(用于距离查询,而不是路径)当前最好的全动态精确APSP算法,需要摊销更新时间,同时支持O 1 最糟糕的查询时间,请注意,如果您有O n log n O(n2(logn+log2(1+m/n))O(1)O(nlogn)边缘,那么您可以使用Dijkstra和Fibonacci堆从头开始重新计算,并获得与Thorup算法相同的运行时间。因此,如果您的图形不密集,我建议您使用Dijkstra。

我不知道任何更好的增量算法。但是,如果存在针对此特殊问题的更新结果,则应该进行网络搜索。


(s,t)

实际上,@ RondogiannisAristophanes迄今为止所提出的建议是最好的。看一下这篇文章,它声称:“对于加权有向图或无向图,递增和递减的单源最短路径问题在很大的意义上至少与静态所有对最短路径一样困难。问题。” (老实说,我只阅读了序言)-参考:“关于动态最短路径问题”,Rodirty&Zwick,但是请您告诉我们您的确切问题是什么?有什么具体情况?到目前为止你还做什么?-也许我们可以为您提供更好的帮助。
2012年

@RondogiannisAristophanes性能越好,实现起来就越困难(在大多数情况下),有时在实际应用中,您并不需要对性能进行太多改进。
2012年

@AJed我编辑了帖子,以包含对该问题的简化描述。
Rontogiannis Aristofanis

5

我相信AD *算法可能会对您有所帮助。

http://www.cs.cmu.edu/~ggordon/likhachev-etal.anytime-dstar.pdf

当收到有关基础图的更新信息时,该算法将逐步修复其先前的解决方案。结果是一种结合了随时随地计划者和增量计划者的优点的方法,可以为复杂的动态搜索问题提供有效的解决方案

AD *亮点:它是“随时”的,这意味着它可以很快为您提供“次优解决方案”,尽管它可能不是最好的。但是,如果有足够的时间,它将返回最佳解决方案。同样,您可以通过某些用户定义的常量将次优解决方案限制为不比最优解决方案差。这使您能够在实时计划方案中使用此方法,在这种情况下,拥有一个好的解决方案(理论上讲“好的”是有界的)比根本没有解决方案要好。

http://www.cs.cmu.edu/~maxim/software.html

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.