【算法导论笔记】最小生成树

在一个连通的无向图G=(V,E)中,找到一个无环子集T(是E的子集),既能够将所有的结点连接起来,又具有最小的权重,这时的T便成为最小生成树。

解决最小生成树的两个常用算法为:Kruskal算法和Prim算法。如果使用普通的二叉堆,这两个算法的时间复杂度最小为O(ElgV)。但如果使用斐波那契堆,Prim算法的时间复杂度将改善为O(E+VlgV)。


基本策略


GENERIC-MAT(G, w)
  A = Empty
  while A does not form a spanning tree
  	  find an edge(u, v)that is safe for A
  	  A = A ∪ {(u, v)}
  return A

Krushkal 算法

MST-KRUSKAL(G, w)
  A = Empty
  for each vertex v∈G.V
  	  MAKE-SET(v)
  sort the edges of G.E into nondecreasing order by weight w
  for each edge(u,v)∈G.E, taken in nondecreasing order by weight
  	  if FIND-SET(u) ≠ FIND-SET(v)
  	  	  A = A ∪ {(u, v)}
  	  	  UNION(u, v)
  return A

Prim 算法

MST-PRIM(G, w, r)
  for each u∈G.V
  	  u.key = ∞
  	  u.π = NIL
  r.key = 0
  Q = G.V
  while Q ≠ Empty
  	  u = EXTRACT-MIN(Q)
  	  for each v∈G.Adj[u]
  	    if v∈Q and w(u, v) < v.key
  	    	v.π = u
  	        v.key = w(u, v)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值