最小生成树

原创 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

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

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

相关文章推荐

最小生成树及其拓展ppt

  • 2017年07月09日 11:20
  • 127KB
  • 下载

最小生成树之prim

  • 2016年01月03日 10:15
  • 3KB
  • 下载

【HDU1233】还是畅通工程(最小生成树-水题)

点击打开题目 还是畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 ...

matlab 最小生成树程序

  • 2015年09月13日 17:19
  • 636B
  • 下载

最小生成树

  • 2013年10月24日 00:02
  • 1KB
  • 下载

比较Dijkstra算法和最小生成树prim算法之间的区别

我们先看看他们的模板:

数据结构 PRIM最小生成树

  • 2014年05月29日 20:52
  • 1.06MB
  • 下载

最小生成树项目

  • 2014年07月01日 20:19
  • 112KB
  • 下载

最小生成树(普利姆算法、克鲁斯卡尔算法)

最小生成树(普利姆算法、克鲁斯卡尔算法) 标签: 算法 2012-10-11 10:01 82648人阅读 评论(8) 收藏 举报 本文章已收录于: 分类: 算法(32) ...

最小生成树

  • 2013年05月06日 08:49
  • 950KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:最小生成树
举报原因:
原因补充:

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