【问题标题】:Modifying shortest path to get a min-cost path修改最短路径以获得最小成本路径
【发布时间】:2011-12-19 19:43:36
【问题描述】:

如果我们修改最短路径问题,使得两个顶点之间的路径成本是其上边成本的最大值,那么对于任何一对顶点 u 和 v, 它们之间遵循最小成本生成树的路径是最小成本路径。

我怎样才能证明这种方法是正确的?这是有道理的,但我不确定。有谁知道这个算法是否存在于文献中?有名字吗?

【问题讨论】:

  • 最短路径问题最小成本问题,其中“成本”定义为距离。您是在谈论一个同时存在距离和一些其他成本的问题,这是您想要最小化的成本?交通/驾驶就是这样一个问题,您可能有两个成本:距离和时间。较短但较繁忙的街道具有较低的距离成本但较高的时间成本,您可以最小化一个或另一个,或两者的某种加权组合。 (与构建证明并不完全相关)

标签: algorithm graph theory graph-algorithm


【解决方案1】:

您可以使用 MST 的一些基本事实(通常在 Prim 和 Kruskal 算法的正确性证明中讨论)。现在最重要的是

引理 1:

给定一个图割(将顶点分成两个 不相交集)连接两个部分的 MST 中的边将是 连接两部分的最便宜的边。

(证明是直截了当的,如果有更便宜的边,我们将能够轻松构建更便宜的生成树)

如果考虑最大成本,我们现在可以证明 MST 中的路径都是最小成本路径:

G 中的任意两个顶点st 以及在G 的MST 中连接它们的路径p。现在让uv 成为这条路径中最昂贵的边。我们可以描述在这条边上切割的图,一个分区的顶点位于 MST 的u 一侧,另一个分区的顶点位于 v 一侧。我们知道任何连接st 的路径都必须通过这个切割,因此我们可以确定从st 的任何路径的成本必须至少是这个切割上最便宜的边的成本。但是引理 1 告诉我们 uv 是这个切割中最便宜的边缘,所以p 必须是最小成本路径。

【讨论】:

  • 总是存在最小生成树(可能的树的数量是有限的 - 它们的子集必须是最小的)并且在任何生成树中的任意两个节点之间总是存在一条路径(因为树跨越所有顶点)。然后,证明基本上说,如果成本由最大值确定,则 MST 中的那些路径也是最小成本路径。
【解决方案2】:

您提到的方法在讨论 Prim 算法和 Dijkstra 算法之间关系的文献中进行了详细讨论,通常维基百科是您开始研究的好地方:

Dijkstra's algorithm 的基础进程类似于Prim's algorithm 中使用的贪婪进程。 Prim 的目的是找到连接图中所有节点的最小生成树; Dijkstra 只关注两个节点之间成本最低的路径。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-12
    相关资源
    最近更新 更多