最小生成树

原创 2017年01月03日 09:52:06

安全边

Prim算法

MST-PRIM(G,w,r)
    for each u belong to G.V
        u.key = oo
        u.p = NIL
    r.key = 0
    Q = G.V
    while Q != null
        u = EXTRACT-MIN(Q)
        for each v belong to G.Adj[u]
            if v belong to Q and w(u,v) < v.key
                v.p = u
                v.key = w(u,v)

Q中存储图G的节点,每个节点有两个属性,v.key表示与v相连的边的最小权重,v.p表示最小权重的边的另一个节点(也是最小生成树中的父节点)

Prim算法的运行时间取决于最小优先队列Q的实现
普通二叉堆,前五行初始化操作时间建堆\(O(V)\)
while循环执行\(V\)次,EXTRACT-MIN操作花费\(O(log_2(V))\)->\(O(Vlog_2(V))\)
for循环一共执行\(2E\)次,v.key=w(u,v)隐含一个DECREASE-KEY操作花费\(O(log_2(V))\)->\(O(Elog_2(V))\)
所以总的时间代价为\(O(V + Vlog_2(V) + Elog_2(V))=O(Elog_2(V))\)

如果使用斐波那契堆,EXTRACT-MIN的摊还代价为\(O(log_2(V))\),DEVREASE-KEY的摊还代价为\(O(1)\),所以总的代价为\(O(E + Vlog_2(V))\)

适用于稠密图

Kruskal算法

以边为主,每次加入的边都是权重最小的,但是这条边不能在一个点集内

用到了不相交集合的内容

MST-KRUSKAL(G,w)
    A = null
    for each vertex v belong to G.V
        MAKE-SET(v)
    sort the edges of G.E into nondecreaseing order by weight w
    for each edge(u,v) belong to G.E ,taken in nondecreasing order by weight 
        if FIND-SET(u) != FIND-SET(v)
            A = A + (u,v)
            UNION(u,v)
    return A

算法运行时间依赖于不相交集合数据结构的实现方式。

版权声明:本文为博主原创文章,未经博主允许不得转载。

最小生成树计数-Kruskal+Matrix_Tree定理

/* *算法引入: *给定一个含有N个结点M条边的无向图,求它最小生成树的个数t(G); * *算法思想: *抛开“最小”的限制不看,如果只要求求出所有生成树的个数,是可以利用Matrix-...
  • Jarily
  • Jarily
  • 2013年05月08日 20:55
  • 5853

最小生成树总结

一.最小生成树问题 给定一张图,图中有许多的节点还有许多长度不同的边将这些点点相互连接,找出连接所有点的最短方式就是最小生成树,可以证明,这样一种最小的情况是不会出现环的,由于所有的无环图都可以看做...
  • u013555159
  • u013555159
  • 2016年05月07日 12:13
  • 847

贪心算法——Prim最小生成树

1、首先介绍一下什么是贪心算法: 贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。ps:不懂得话可...
  • baidu_28944591
  • baidu_28944591
  • 2016年06月26日 16:50
  • 1760

hdu 1233 (最小生成树 简单例题)

还是畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S...
  • qq_33406883
  • qq_33406883
  • 2016年07月23日 15:10
  • 1180

比较好的题目“典型的最小生成树”

Watering Hole My Tags   (Edit)   Source : USACO 2008 Open  ...
  • struggle_mind
  • struggle_mind
  • 2014年05月07日 21:33
  • 1038

最小生成树(贪心算法)

最小生成树问题——连接n个针脚,可以使用n-1根连线,每个连线连接两个针脚,使得所使用的连线长度最短     抽象为图问题,一个连通无向图G = (V, E),V是针脚的集合,E是针脚之间的可能连接...
  • huangwwu11
  • huangwwu11
  • 2015年04月15日 23:38
  • 538

判断最小生成树的唯一性

先用kruskal算法算出最小生成树,并把最小生成树的边记录下来。然后依次枚举删除边,用其他的边再次使用kruskal算法算出最小生成树。如果算出的代价和原来的相同,则不唯一,否则唯一。另外当我们删除...
  • ECNU_LZJ
  • ECNU_LZJ
  • 2016年12月13日 19:38
  • 1559

最小生成树题集

A题,L题:poj2421 简单题 题意:题目这么长,其实大部分都在扯逼-_-。以字母代替点,每行输入字母,与其相连的个数,以及相连的具体点和其距离,计算全联通最小距离。 题解:只需要把字母距离化...
  • qq_33199236
  • qq_33199236
  • 2016年08月01日 20:21
  • 1550

最小生成树及其构造方法

最小生成树的概念以及怎么样利用普利姆算法和克鲁斯卡尔算法去构造一个图的最小生成树。利用通俗易懂的文字去一步步描述了普利姆算法和克鲁斯卡尔算法的精华并且举例说明了核心思想...
  • qq122627018
  • qq122627018
  • 2016年07月16日 09:32
  • 2026

最小生成树(prim算法与kruskal算法)(模板)

th写的总结,很不错,转载一下:点击打开链接   首先说一下什么是树:     1、只含一个根节点     2、任意两个节点之间只能有一条或者没有线相连     3、任意...
  • zwj1452267376
  • zwj1452267376
  • 2015年08月13日 08:54
  • 1500
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:最小生成树
举报原因:
原因补充:

(最多只允许输入30个字)