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

Algorithm 删除后选择最佳边重新插入的算法,algorithm,graph-theory,graph-algorithm,bellman-ford,Algorithm,Graph Theory,Graph Algorithm,Bellman Ford,设G=(V,E)是一个边权非负的连通有向图,设s和t是G的顶点,设H是通过删除一些边得到的G的子图。假设我们想将G中的一条边重新插入H,这样在生成的图中从s到t的最短路径就尽可能短。描述并分析选择最佳边以重新插入的算法 我认为它需要与bellman ford算法一起用于我们删除的每一条边, 然后从所有路径中找出最短路径。。 但是这个的运行时间太长了。。有人有更好的想法吗? 谢谢:)让e[1]=(u[1],v[1]),e[2]=(u[2],v[2]),…,e[N]=(u[N],v[N])是从G中移

设G=(V,E)是一个边权非负的连通有向图,设s和t是G的顶点,设H是通过删除一些边得到的G的子图。假设我们想将G中的一条边重新插入H,这样在生成的图中从s到t的最短路径就尽可能短。描述并分析选择最佳边以重新插入的算法

我认为它需要与bellman ford算法一起用于我们删除的每一条边, 然后从所有路径中找出最短路径。。 但是这个的运行时间太长了。。有人有更好的想法吗? 谢谢:)

让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]}的最短路径的代价,我们将为每个节点N调用A(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的路径不存在的小情况。它们不会对一般方法造成任何问题,但您需要在实现中注意它们。)