prim算法正确性证明

文章通过两种思路证明Prim算法在构建带权无向图的最小生成树时的正确性。一是利用反证法,假设在某步选择错误,但算法每次都选取最小边,导致矛盾;二是借助最优子结构,每次将最小边添加至当前生成树,保证了最优化。
摘要由CSDN通过智能技术生成

prim算法正确性证明

条件 : 存在带权无向图 G = (V , E),其中 V 表示途中点的集合,E 表示图中边的集合
思路1 : 可以利用反证法,不失一般性,假设第 t 步已经使用prim算法生成了一颗最小子生成树,在第 t+1 步连接 Vt+1 时 prim 算法搞错了,找到了一条错误的边 Ew:j+1,使得最小生成子树不是正确的最小生成子树,那么应该存在一条正确的边 Er:j+1 使得加入树的 Vt+1 为最小生成树,那就意味着 Ew:j+1 > Er:j+1 ,但是 prim 算法每次找到的就是最小边,即 Ew:j+1 <= Er:j+1 ,与 prim 算法矛盾,故可证明 prim 算法的正确性.

思路2 : 可以利用最优子结构(可能不对哈).可以把没有加入到最小生成树的点看成是一个集合 N ,prim 算法每次要从最小生成树 T 上找到一条到集合 M 最短的边,将 T 和 N 连接起来,并将 T 和 M 连接的点并入 T 中.
a): 随机找一个点 V1,将其他点计入 M (假设M已经是最小生成树) 中,prim找到一条最短的路径 记为 Ew:1 使得 V1 与 M 相连,构成最小生成树,假如 Prim 这一步做错了,找的的边不是最短的,那就存在另一条边 记为 Er:1 使得 V1 与 M 相连接可以构成最小生成树,那么此时应该满足如下情况 Ew:1 > E:r1,但是 prim算法找的就是最小边,所以应该为 Ew:1 <= E:r1,故矛盾,所以 prim 算法找到的应该是最短路径,后记 与 V1 相连并处于 M 中的点为 V2,将 V1 和 V2 看成一个点,并将 V2 从 M 中删除
b)现在是 N-1 的问题了,按照 a) 走就行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值