如果一个边缘权重减小,则更新最短路径距离矩阵

时间:2010-12-17 05:14:40

标签: algorithm graph-theory path-finding shortest-path

我们给出了一个加权图G及其最短路径距离的矩阵delta。因此delta(i,j)表示从i到j的最短路径的权重(i和j是图的两个顶点)。 最初给出的delta包含最短路径的值。突然,边缘E的重量从W减小到W'。如何在O(n ^ 2)中更新delta(i,j)? (n =图的顶点数) 问题是不再计算具有最佳O(n ^ 3)复杂度的所有对最短路径。问题是更新增量,因此我们不需要重新计算所有对最短路径。

更明确:我们所拥有的只是一个图表及其delta矩阵。 delta矩阵仅包含最短路径的值。现在我们想根据图表的变化更新delta矩阵:减少边缘权重。如何在O(n ^ 2)中更新它?

3 个答案:

答案 0 :(得分:6)

如果从节点a到节点b的边E的权重减小,那么我们可以在恒定时间内更新从节点i到节点j的最短路径长度。从i到j的新的最短路径或者与旧的最短路径相同,或者它包含从a到b的边缘。如果它包含a到b的边,则其长度为delta(i, a) + edge(a,b) + delta(b, j)

从这个O(n ^ 2)算法来更新整个矩阵是微不足道的,就像处理无向图的算法一样。

答案 1 :(得分:0)

http://dl.acm.org/citation.cfm?doid=1039488.1039492 http://dl.acm.org.ezp.lib.unimelb.edu.au/citation.cfm?doid=1039488.1039492

虽然他们都考虑增加和减少。增加将使其变得更难。 然而,在第一部分,第973页,第3部分,他们解释了如何在n * n中进行减少。

不,动态的所有对最短路径都可以在少于n n n的情况下完成。维基百科不是最新的我猜;)

答案 2 :(得分:-1)

阅读Dijkstra的算法。这就是你如何做这些最短路径问题,并且无论如何都要以低于O(n ^ 2)的速度运行。

编辑这里有一些细微之处。听起来你提供了从图形中任意i到任何j的最短路径,听起来你需要更新整个矩阵。迭代该矩阵是n ^ 2,因为矩阵是每个节点彼此,或n * n或n ^ 2。简单地为delta矩阵中的每个条目重新运行Dijkstra算法将不会改变此性能类,因为n ^ 2大于Dijkstra的O(| E | + | V | log | V |)性能。我是否正确地阅读了这个,还是我错误地记得大O?

编辑编辑看起来我错误记念了大O.迭代矩阵将是n ^ 2,并且每个Dijkstra将是额外的开销。我没有看到如何在一般情况下如何做到这一点而没有确切地确定W'包含在哪个路径中......这似乎意味着应该检查每一对。因此,您需要在恒定时间内更新每对,或者避免检查数组的重要部分。