我正在学习最小生成树。我通过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并且此树将没有最低成本
我能做对吗?或者我有任何错误吗?
由于
答案 0 :(得分:4)
首先我要提一下,Prim的算法只适用于无向图,所以如果我们认为图是无向的,那么这就是你的情况下算法的逐步进展:
你应该考虑在有向图中找到最小生成树甚至不可能多次,但是对于有向图最接近MST的概念是最小成本arborescence 。