Prim的加权有向图算法

时间:2014-03-18 11:43:59

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

我正在学习最小生成树。我通过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并且(顶点,距离)=> (v5,7)

现在所有v5中距离最远,即7,所以我探索v5,它没有任何边缘,所以我只是标记它已经访问

访问Vertex v5

现在,混乱从这里开始

距离最小的顶点现在为v2,边缘为v5,权重为4,当前v5的距离为7,之前由边缘(v4,v5)分配:7,所以我相信要做最小生成树,v5的距离应该从7更新为4,因为4 <4。 7但它不会因为v5已被访问而Prim的算法不更新已经访问过的顶点的距离而v5的距离将保持为7而不是4并且此树将没有最低成本

我能做对吗?或者我有任何错误吗?

由于

1 个答案:

答案 0 :(得分:4)

首先我要提一下,Prim的算法只适用于无向图,所以如果我们认为图是无向的,那么这就是你的情况下算法的逐步进展:

enter image description here

你应该考虑在有向图中找到最小生成树甚至不可能多次,但是对于有向图最接近MST的概念是最小成本arborescence