【问题标题】:Prim's algorithm for weighted directed graphPrim 的加权有向图算法
【发布时间】:2014-04-24 01:48:25
【问题描述】:

我正在学习最小生成树。我通过 Prim 的加权有向图算法。

算法很简单

  • 您有两组顶点,已访问和未访问
  • 将所有边的距离设置为无穷大
  • 从未访问集中的任何顶点开始并探索其边缘
  • 在所有边中,如果目标顶点未被访问且边的权重小于目标顶点的距离,则使用边的权重更新目标顶点的距离
  • 选择距离最小的未访问过的顶点,然后再重复一遍,直到所有顶点都被访问过

相信通过上面的算法,我一定能在所有生成树中找到代价最小的生成树,即最小生成树。

但是我把它应用到下面的例子中,我认为它失败了。

考虑下面的例子

顶点是 {v1,v2,v3,v4,v5} 和权重的边
(x,y) : w =>
(v1,v2) : 8
(v1,v3) : 15
(v1,v4) : 7
(v2,v5) : 4
(v4,v5) : 7

首先我探索 v1,它有到 v2、v3、v4 的边,所以图变成了
访问顶点 v1 并且 (顶点, 距离) =>
(v2,8)
(v3,15)
(v4,7)

现在 v4 的距离最短,即 7,所以我探索 v4,它与 v5 有边缘,所以会发生以下修改
访问顶点 v4 并且 (vertex, distance) => (v5,7)

现在 v5 的距离最短,即 7 ,所以我探索 v5 并且它没有任何边缘,所以我只是将其标记为已访问

Vertex v5 被访问

现在,混乱从这里开始

距离最小的顶点现在是 v2,它的边到 v5,权重为 4,当前 v5 的距离为 7,之前由边 (v4,v5) : 7 分配,所以,我相信这样做最小生成树,v5 的距离应该从 7 更新到 4,因为 4

我说对了吗?还是我做错了什么?

谢谢

【问题讨论】:

  • 你描述的其实是Prim的算法,但它只适用于无向图。在有向版本上引用Wikipedia“对于有向图,最小生成树问题称为Arborescence 问题,可以使用Chu–Liu/Edmonds 算法在二次时间内求解”。跨度>
  • 它甚至可以在 m + n log n 中解决,就像 Prim 一样

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


【解决方案1】:

首先我要提一下,Prim 的算法只适用于 无向 图,所以如果我们认为该图是无向的,这是算法在您的案例中的逐步进展:

并且您应该考虑到在有向图中多次找到最小生成树是不可能的,但是对于有向图,最接近 MST 的概念是最小成本树状结构

【讨论】:

  • 但是 OPs 图是有向的?
  • @NiklasB.- Prim 的有向图算法?!
  • @NiklasB。你知道,如果我们考虑有向图,就像使用勾股定理来计算斜三角形一样。
  • 我知道,但 OP 似乎不知道。也许您应该指出,这适用于有向的情况,并为图确实有向的情况建议一种替代算法
  • @NiklasB。好建议。我刚刚做到了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多