码迷,mamicode.com
首页 > 其他好文 > 详细

关于Prim的堆优化

时间:2018-02-21 19:20:30      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:理想   kruskal   prim   有一个   思路   style   就是   最小生成树   span   

   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

关于Prim的堆优化

标签:理想   kruskal   prim   有一个   思路   style   就是   最小生成树   span   

原文地址:https://www.cnblogs.com/zub23333/p/8457047.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!