【问题标题】:Given an MST for an edge-weighted graph, how can you find the minimally weighted path from x to y?给定边加权图的 MST,如何找到从 x 到 y 的最小加权路径?
【发布时间】:2019-10-06 15:42:36
【问题描述】:

我有一个由最小生成树表示的边加权无向图。每个顶点由一个整数表示。 MST 如下所示:

我想知道,如何使用此 MST 找到从顶点 x 到顶点 y 的最短路径?假设我想找到从 0 到 3 的最短路径。很容易看出路径是 0-2、2-3,总权重为 0.26+0.17 = 0.43。但是我应该如何构建一个通用的方法呢?在伪代码中

edge           weight
6-2            0,40
4-5            0.35
5-7            0.28
2-3            0.17
0-2            0.26
1-7            0.19
0-7            0.16

【问题讨论】:

  • 应该只有一条路径(它是一棵树),而且不一定是全图中最短的路径,所以我不确定你想做什么
  • @harold 我假设树将包含从任何顶点到任何其他顶点的所有最小路径。
  • 不幸的是,它不是那样工作的,MST 的 total 权重最小,例如在MST on the corresponding wiki page 左下角的两个节点有一条边在原始图中它们之间有 9 条边是最短路径,但这条边不在 MST 中。

标签: minimum-spanning-tree prims-algorithm undirected-graph


【解决方案1】:

在这种情况下,由于您获得了 MST,因此您只知道图中的总边权重是最小的。但是,MST 中两个节点之间的路径并不能保证它是实际图上这两个节点之间的最小路径。为了找到从节点 x 到节点 y 的最小加权路径,您可以在原始图(不是 MST)上执行 Dijkstra 算法。 Dijkstra 可以找到从起始节点(在本例中为 x)到图中每个其他节点的最小距离。

执行 Dijkstra 算法如下并将信息存储在一个表中:

  1. 从起始节点开始,在本例中为 x,然后从 x 到权重最小的节点

  2. 从刚刚访问过的最低权重节点,探索邻居,再次选择权重最低的边

  3. 总结到目前为止距离您正在访问的边缘的总成本。如果从 x 开始,然后访问 a,然后访问 c,求 x 到 a 到 c 的总距离。

  4. 如果节点的权重低于之前记录的值,请更新表中的值,因为现在已找到更短的路径。

最终,在执行此算法后,表格应包含从 x 到 y 的最低权重路径。

【讨论】:

    【解决方案2】:

    MST 不一定包含从一个顶点 x 到另一个向量 y 的最短路径。最小生成树是为每个要访问的节点找到最小路径的树。这并不一定意味着从 x 到 y 的最短路径包含在 MST 中。要找到从 x 到 y 的真正最短路径,您必须运行一个算法来找到原始图上的最短路径,例如 Dijkstra 的。

    【讨论】:

      猜你喜欢
      • 2018-12-15
      • 2022-01-19
      • 1970-01-01
      • 2016-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-04
      • 1970-01-01
      相关资源
      最近更新 更多