关于Prim的堆优化

   Prim的算法的具体思路是从某个点开始用贪心的策略向外扩展,找到离当前生成树最近的节点加入树中,并用该节点更新生成树到其他节点的距离。显然复杂度O(n^2),而且有一个二倍的常数(一共扩展n次,每次找最近的点是O(n)的,用该点更新其它点在稠密图时也是O(n)的)。

   然后某些大佬就想到可以用堆维护当前生成树到各个节点的距离,然而其实这并不会快多少

   首先我们假设是个稠密图(稀疏图尽量用kruskal),一共有n个节点要加入生成树中,每个节点加入时又要更新生成树到与之相连的点的距离,我们只是在找离生成树最近的节点时才用到了堆,所以理想复杂度为O(n*(n+logn)),其实也就是O(n^2)。然后我们考虑堆中并不是只有n个节点(因为一个点可以重复入堆多次),所以最坏情况下堆中可能有接近(n^2/2)个节点,再加上堆的常数,就一点优势都没有了。

   总结,求最小生成树时稠密图用prim,且无需堆优化,稀疏图时能用kruskal就用,否则再考虑堆优化prim

转载于:https://www.cnblogs.com/zub23333/p/8457047.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值