繁体   English   中英

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

[英]Given a set of edges and an undirected graph, how do I pick the best edge to add to graph to minimize the shortest path?

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

但这似乎效率低下。 我必须为集合中的每一条边都调用 Dijkstra。 有一个更好的方法吗?

肮脏的伎俩:

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

  • 对于每个快捷方式 x, y 创建一条边 (x, y')。
  • 合并目标和目标'

在此图上运行 Djikstra 将为您提供最短路径,包括快捷方式。 为什么?

  • 如果快捷方式由于某些原因没有帮助,我们在原始图表中并且结果不会改变。
  • 如果我们决定使用快捷方式,我们会卡在复制的图表中,我们不能 go 回来 - 因此我们只能使用一个快捷方式。 由于目标是我们合并后唯一的“奇异”节点,因此我们仍然可以到达它。

因此,如果 Djikstra 在这个修改后的图中找到了一条路径,我们就有了新的最短路径,它将快捷方式带入帐户。

由此产生的复杂性由 Djikstra 给出,并且由于我们只在混合中添加了 E + len(shortcuts) 边缘,因此与原始 Djikstra 相比,O-notation 没有任何改变。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM