Algorithm 给定一组边和一个无向图,如何选择要添加到图中的最佳边以最小化最短路径?

Algorithm 给定一组边和一个无向图,如何选择要添加到图中的最佳边以最小化最短路径?,algorithm,graph-theory,shortest-path,dijkstra,Algorithm,Graph Theory,Shortest Path,Dijkstra,我想的是,对于我可以从中选择的一组边中的每一条边,构建一个插入该边的图形副本,然后运行Dijkstra。最佳边将来自最终总权重最低的图 但这似乎有点低效。我必须打电话给迪克斯特拉,让他在这场比赛中占据优势。有更好的方法吗?肮脏的把戏: 在修改后的图形上运行Djikstra。此图将包括原始图中的所有顶点和边。两次。 对于每个顶点i,创建一个顶点i’。如果存在边(u,v),则创建边(u',v')。 因此,除了s之外,我们有两个看起来相同的图形。 现在魔术来了: 对于每个快捷方式x,y创建一条边(x

我想的是,对于我可以从中选择的一组边中的每一条边,构建一个插入该边的图形副本,然后运行Dijkstra。最佳边将来自最终总权重最低的图

但这似乎有点低效。我必须打电话给迪克斯特拉,让他在这场比赛中占据优势。有更好的方法吗?

肮脏的把戏: 在修改后的图形上运行Djikstra。此图将包括原始图中的所有顶点和边。两次。
对于每个顶点i,创建一个顶点i’。如果存在边(u,v),则创建边(u',v')。 因此,除了s之外,我们有两个看起来相同的图形。
现在魔术来了:

  • 对于每个快捷方式x,y创建一条边(x,y')
  • 合并目标和目标的
在该图上运行Djikstra将为您提供最短路径,包括快捷方式。为什么?

  • 如果由于某些原因,快捷方式没有帮助,我们将进入原始的图表,结果不会改变
  • 如果我们决定使用shorcut,我们将陷入复制的图中,无法返回-因此我们只能使用一个shorcut。由于目标是合并后唯一的“单一”节点,因此我们仍然可以到达它
因此,如果Djikstra在这个修改过的图中找到了一条路径,我们就有了新的最短路径,它将快捷方式考虑在内


由此产生的复杂性由Djikstra给出,因为我们只在混合中添加了E+len(快捷方式)边,所以从原始Djikstra的O-表示法来看没有任何变化。

您是最小化所有最短路径,还是最小化一条具体路径?@Shamis OH,对不起,我忘了提及。在起点和终点之间存在一条现有路径,我正在尝试将该路径最小化。所以,只有一条具体的道路。我只是在打同样的东西,但你比我快+1这是一个非常聪明的解决方案!它会不会遇到只找到第一条减少路径的边,而不是找到最佳边的问题@蓝拉贾·丹尼普夫卢格霍夫特和Shamis@Mike729:Dijkstra's找到最短路径,以便找到最佳边(如果有的话)。“我们被困在第二张图中”只是一种想象为什么我们找到的最短路径是正确的方式。Djikstra是一种“波传播”算法——因此只有一部分波被卡住,其余部分继续在原始图形中/在不同的位置卡住。首先到达目标节点的波的一部分是经过最短路径的波。