在我的经济学研究中,我目前正在处理特定的最短路径问题:
给定具有边缘权重的定向确定性动态图,我需要找到来自一个源S的最短路径,其经过N个边缘.图形可以具有周期,边缘权重可以是负的,并且允许路径不止一次地通过顶点或边缘.
这个问题有一个有效的算法吗?
最佳答案 一种可能性是:
首先在图中找到最低边权重.
然后从起始边缘(最初是从起始点开始的空路径)构建所有路径的优先级队列,其中所有尚未处理的边缘被计为具有最低权重.
主循环:
>从队列中删除权重最小的路径.
>如果路径有N条边,则表示已完成
>否则将该路径的所有可能的单边扩展添加到优先级队列
然而,这个简单的算法有一个缺陷 – 你可能会多次重新访问一个顶点,因为i:th edge(访问第2和第4个是好的,但在两个不同的路径中是第4个是问题),这是低效的.
可以通过在上面的第3步中跳过它们来改进算法,因为优先级队列保证到顶点的第一个部分路径具有到该顶点的最低权重和,并且路径的其余部分不依赖于你如何到达顶点(因为边和顶点可以重复).