zoukankan      html  css  js  c++  java
  • 最小生成树-Borůvka算法

    一般求最小生成树的时候,最流行的是Kruskal算法,一种基于拟阵证明的贪心,通过给边排序再扫描一次边集,利用并查集优化得到,复杂度为(O(ElogE))。另一种用得比较少的是Prim算法,利用优先队列实现做到(O(ElogV))

    在翻ZYQN博客的时候,看见他写的位运算最小生成树中提到了Borůvka算法,于是学了一下。

    算法

    Borůvka算法是1926年发明的,是最早发明的最小生成树算法,复杂度为(O(ElogV))

    算法思想非常简单。初始时每个点都是一颗不同的树,每次遍历边表,找距离每棵树最近的另一棵树,并把它们连起来。可以发现,每一次一棵树都与另一棵树连接起来,所以每次树的数量都至少减少到一半,所以这样操作的次数为(O(logV))次。每次我们遍历边表,连接所用的时间为(O(E+V*alpha (V))),所以总复杂度为(O(ElogV)),实现起来也非常简单。

    代码

    参考bzoj2429的题解

  • 相关阅读:
    音乐小转盘 css3 动画
    1.41
    1.4
    1.1
    课程设计——输出到TXT
    课程设计——c++中读取txt文件
    大二第一学期期末课程设计 2015.12.28
    无向图的广度优先遍历
    JS基本概念
    继承
  • 原文地址:https://www.cnblogs.com/owenyu/p/6861094.html
Copyright © 2011-2022 走看看