具有动态边缘成本的最短路径(算法)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了具有动态边缘成本的最短路径(算法)相关的知识,希望对你有一定的参考价值。

我正在寻找一种算法,该算法可以在无向图中找到两个节点之间的最短路径,其成本是动态的。通过动态,我的意思是边缘成本取决于下一个(未来)步骤。例如,在这样的图表中:

我正在寻找从“a”到“e”的最短路径,但“a”到“b”的成本取决于下一步。如果我去c,它是7,如果我去d,它是9。

我的问题是:是否有解决该问题的算法?

答案

将问题减少到“常规”最短路径问题

创建虚拟顶点b1,b2(而不是b)和边缘:

(a,b1,7), (b1,c,6), (a,b2,9), (b2,d,5)

其余的边和顶点保持原样。

现在,从源到目标运行常规的最短路径算法(Dijkstra / Bellman Ford)。

(对任何'条件'权重边重复此过程)。

另一答案

正如之前的回答所提到的,由于边权重仅取决于路径中的下一个顶点,因此您可以复制每个顶点最多| V |跟踪下一个行进的顶点的重复项,其中每个重复顶点只有一个外出邻居,输出成本取决于下一个访问哪个邻居。在这个修改过的图上运行Dijkstra算法的总复杂度并不比O(V(V log v + E))差,如果你在每个顶点都有边界度k,那么复杂度就是O(k(V log V +) E)),其中V是顶点数,E是边数。

以上是关于具有动态边缘成本的最短路径(算法)的主要内容,如果未能解决你的问题,请参考以下文章

最短路径图算法帮助Boost

图 - 具有顶点权重的最短路径

算法动态规划之图的最短路径(C++源码)

算法动态规划 ⑥ ( 骑士的最短路径 II | 问题分析 | 代码示例 )

算法动态规划 ⑥ ( 骑士的最短路径 II | 问题分析 | 代码示例 )

修改的最短路径算法