删除后选择要重新插入的最佳边缘的算法

时间:2016-01-12 17:39:33

标签: algorithm graph-theory graph-algorithm bellman-ford

设G =(V,E)是具有非负边缘权重的连通有向图,令s和t是G的顶点,并且令H是通过删除一些边缘而获得的G的子图。假设我们想要将G中的一条边正好重新插入到H中,以便在结果图中从s到t的最短路径尽可能短。描述并分析算法以选择重新插入的最佳边缘。

我认为它需要与我们删除的每个边缘使用bellman-ford算法, 然后找到所有的最短路径.. 但是这个的运行时间太大了......任何人都有想法吗? 谢谢:))

1 个答案:

答案 0 :(得分:0)

设e [1] =(u [1],v [1]),e [2] =(u [2],v [2]),...,e [N] =(u [ N],v [N])是从G中移除的边缘以获得H.

从s开始在H上运行Dijkstra算法,跟踪每个{u [1],u [2],...,u [N]}的最短路径的成本,我们称之为A (n)对于每个节点n。

在H 上运行Dijkstra算法,从t开始反转所有边,跟踪到{v [1],v [2],...的每条最短路径的成本, v [N]},我们将每个节点n称为B(n)。

然后,重新插入H的最佳单边是边i,使得A(u [i])+ c(e [i])+ B(v [i])最小化。

该算法运行Dijkstra算法两次,因此该部分的复杂度为O(| E | + | V | log | V |),其中| E |是边数和| V |是节点数。

(我故意忽略了从s到t的最短路径的琐碎案例,不涉及任何被移除的边缘或者没有从s到t的路径。它们不会对一般方法造成任何问题,但是你' d需要在实施中关注它们。)