最短路径上最重要的边缘

时间:2013-04-30 02:58:32

标签: graph dijkstra edge

我在Sedgewick的算法课程中有这个问题:“关键边缘。给定边缘加权有向图,设计一个E*log(V)算法来找到边缘,其移除导致最大增加从st的最短路径的长度(可能无限)。假设所有边权重都是正的。(提示:计算最短路径距离d(v)形式{{ 1}}到s并考虑降低的费用v。)“

我在互联网上看到,1989年有三(3)个人提出了复杂算法c′(v,w)=c(v,w)+d(v)−d(w) ≥ 0,这需要高级数据结构,我认为它是在图表上(不是有向图)。如果有三位先进的计算机科学家来开发这种算法,对于入门课程来说难道不是太大的问题吗?但也许只有O(E + V*log(V))更容易。

你可以帮我解决一下吗?我不明白问题中给出的提示。

2 个答案:

答案 0 :(得分:2)

这是一个令人困惑的问题,我同意。以下是我对此的一些看法。

通过将原始成本替换为降低成本,将A* search算法简化为Dijkstra算法时,使用“降低成本”一词和定义:

c′(v,w) = c(v,w) - h(v) + h(w) = c(v,w) - (h(v) - h(w)) > 0

h(v) - h(w)部分是启发式函数的一滴,在一致(单调)启发式的情况下不应超过边缘成本,因此降低的成本仍然大于0(参见幻灯片14和15 here

看起来Sedgewick建议在d(v)中搜索与原始G'相同的新/替换最短路径时使用原始距离函数(G)作为一致启发式算法},但沿着从st的原始最短路径移除了一条边。就个人而言,我看不出它如何帮助解决O(ElogV)中最重要的边缘问题。

还有一个类似的问题:在图表中找到所有向下和向上的关键边缘。根据定义,降低向下临界边缘的成本会降低整体SP成本。增加上行关键边缘的成本会增加整体SP成本。所有关键边都可以在O(ElogV)中找到,参见第8章here。但这并没有回答什么边缘是最关键的问题(当移除时导致最大SP增加)。

正如你所指出的那样,Malik,Mittal和Gupta(1989)在2007年解决了最重要的边缘问题 {{1次。我还没有找到原始的MMG论文,但this presentation解释得很好。据我所知,它可以通过优先级队列解决,不需要特定的数据结构。

很抱歉没有真正回答原始问题(使用降低的成本解决有关图中最重要的边缘问题),但仍希望上面的链接和想法可能对某人有用。我很高兴看到Sedgewick的解决方案。

答案 1 :(得分:2)

以下是基于Sedgewick提示在最短路径上找到关键边的算法草图。

首先,降低成本 c'(v,w)= c(v,w)+ d(v)-d(w)对应于最短路径长度的增加从 s w ,在 w 之前经过 v 。 (如果 v 处于从 s w 的最短路径中,则此增加为0.)(确实d(v)是从s到v和c(v,w)的最短路径的长度从v到w的成本。)

假设从 s t 的最短路径是(s,...,v,t),我们删除了最后一条边缘(v,t)。然后,从 s t 的最短路径长度的增加等于所有的 c'(u,t)的最小值-edges (u,t) u!= v

假设 u c'(u,t)是最小值(仍 u!= v )。然后按照从 s u 的最短路径,直到到达顶点,比如 w ,属于的最短路径s t (没有任何删除的边缘)。从 s t 的最短路径类似于(s,...,w,...,v,t)。 < / p>

critical edge

请注意,如果删除 w t 之间的任何边缘,您将获得 c'(u,t)的最大增加在最短的路径。实际上,如果缺少 w t 之间的边缘之一,那么从 w t 就足够了>通过顶点 u 。另一方面,请注意删除最后一个边缘(v,t)将导致这种增加。

现在,只需使用 w 进行迭代 t 。找到顶点 x ,使 c'(x,w)为最小值, x 不在最短路径上。按照从 s x 的最短路径,直到到达属于从 s w

到达 s 后,您就可以确定要移除哪个顶点,以使最短路径的长度最大化。