如果我们修改最短路径问题,使得两个顶点之间的路径的成本是其上边缘的成本的最大值,那么对于任何一对顶点u和v, 它们之间的路径遵循最小成本生成树是最低成本路径。
我如何证明这种方法是正确的?这很有意义,但我不确定。有谁知道这个算法是否存在于文献中?它有名字吗?
答案 0 :(得分:1)
你提到的方法在讨论Prim算法和Dijkstra算法之间关系的文献中有详细讨论,通常维基百科是开始研究的好地方:
Dijkstra's algorithm的基础流程类似于Prim's algorithm中使用的贪婪流程。 Prim的目的是找到连接图中所有节点的最小生成树; Dijkstra只关注两个节点的最低成本路径。
答案 1 :(得分:0)
您可以使用MST的一些基本事实(通常在Prim& Kruskal算法的正确性证明中讨论)。现在重要的是
Lema 1:
给定图形切割(将顶点分割成两个 不相交的集合)MST中连接两个部分的边缘将是 连接这两个部分的边缘最便宜。
(证据是直截了当的,如果有更便宜的边缘,我们将能够轻松地构建更便宜的生成树)
我们现在可以证明,如果考虑最大成本,MST中的路径都是最低成本路径:
在s
中取任意两个顶点t
和G
以及在GST中连接它们的路径p
。现在让uv
成为这条路上最昂贵的边缘。我们可以描述在这条边上切割的图形,其中一个分区的顶点位于MST的u
侧,另一个分区的顶点位于v
侧。我们知道连接s
和t
的任何路径都必须通过此剪切,因此我们可以确定从s
到t
的任何路径的费用必须至少为成本这个切口最便宜的边缘。但是引理1告诉我们uv是这个削减最便宜的边缘,因此p
必须是最低成本路径。