我有一个加权无向图。给定该图中的两个顶点之间没有路径,我想在此后之间创建一条路径,方法是向图中添加边,并尽可能少地增加图的总权重。是否存在确定要添加哪些边的已知算法?
一个类似的问题是,如果我有一个国家的道路系统图,有两个城市彼此之间无法通行道路,而我想建立连接它们的最短的新道路。它们之间可能还有其他两个城市都没有连接,如果存在,我想利用它们。
这是一个小例子;红色和绿色是我要连接的顶点,黑色线是现有的边缘,蓝色线表示我要存在的路径。
有没有一种已知的算法可以给出该路径中缺少的边缘?
答案 0 :(得分:2)
您可以对现有边缘使用权重为零的A *算法,对缺失边缘使用距离(或任何合理的成本)的A *算法。
答案 1 :(得分:1)
实际上,Dijkstra进行了一些预处理是最适合您的朋友。
我回答的问题可能与此类似:What is the time complexity if it needs to revisit visited nodes in BFS?
我的共同点-您想使用尽可能多的现有道路。另外,有时您需要打破它并建立新的道路。关键是要为现有的和“可能的”新的权重设置适当的权重。
我的方法是什么-假设每1公里的现有道路的成本为1。您可以将图中的所有现有道路相加,并说总共有1000公里。然后,我将对整个图形进行预处理,并从每个节点(城市)创建到所有其他非直接连接的城市的路径,每个城市的成本为每公里1000 + 1000,然后在其上运行Dijkstra。
它将自动使用尽可能多的现有道路并创建尽可能少的新道路。
此外,您可以稍微使用该设置来实现所需的功能。
想象一下,有两个城市彼此相距仅100m。实际上,它们之间存在一条距离长达20 000 km的道路。使用我建议的设置,您将获得2万公里的最佳路径(这可以满足“如果不需要,请勿新建任何道路”的需求)。有时您实际上想要这个。有时候你没有。如果您不这样做,您可以考虑一下“好吧,如果我建造一些额外的道路,并且可以大大缩短距离,那将是更好的解决方案”。如果是这种情况,您可以考虑降低新公路的价格(例如取消初始成本或每公里成本或两者都取决于您将其视为最佳产出)。
答案 2 :(得分:0)
我认为没有公认的算法。但是您可以尝试执行以下操作。首先运行维特比三角剖分,然后在此完全连接的图形上进行深度优先搜索。从A-> B中获取路径中新链接的总和。删除最长的新链接,然后重复。一旦无法到达从A-> B的路径,请检查以前的解决方案,以查看哪个解决方案的新链接总数最小。