普利姆算法的正确性证明

已知条件:

图p是一个连通图,Y是对p使用prim算法得到的一棵生成树,Y1是p的一棵最小生成树

1.若Y=Y1,显然prim算法是正确的

2.Y≠Y1,可进行如下推导:

a)Y中有n(n≥1)条边不存在于Y1中,在构建Y的过程中,第一次遇到这样的一条边时(以e表示),则e的一个端点u落在V内(V是之前的prim运算得到的一个子顶点集),另一个端点v落在V外

b)Y1是连通的,故Y1中存在u到v的一条的路径,此路径上必然存在一条边f,它的一个端点落在V内,另一个端点落在V外

c)把e加入Y1,去掉f,Y1仍然连通,根据prim算法,权值W(f)≥W(e),否则e不会被选入V,如果W(f)>W(e),新构建的树的权值和会比Y1小,而Y1是最小生成树,因此W(f)>W(e)不成立,得W(f)=W(e)

d)对每一条类似e的边,重复过程c),最终Y和重新构建的的Y1拥有的边完全一致,新构建的Y1也是最小生成树,因此Y也是最小生成树,证明prim算法正确

 

posted @ 2013-08-11 08:20  SKY_VIEW  阅读(5466)  评论(1编辑  收藏  举报