最小生成树(Minimal Spanning Tree MST)--《算法导论》
2016-08-25 19:16
1016 查看
MST:
简单的说就是给定一个连通的无向图,并给每一条边赋予权重w(u,v),在其中找出一个边集A,使得A链接所有的顶点,并使得这些V和这个边集A一起构成一棵树T=(V,A),并且边集权重最小。
书中描述了两种采用贪心策略的算法,简单地说就是设法找到一个切割(S,V−S)中的轻量及边,加入到边集A中。用通用伪代码描述就是
GENERIC-MST(G,w)
A=∅
while A does not form a spanning tree
find a edge (u,v) that is safe for A
A=A∪{(u,v)}
return A
下面介绍两种找到安全边的算法,一种是Kruskal 的算法,另一种是Prim 的算法,两种算法的复杂度是差不多的。
伪代码
MST-KRUSKAL(G,w)
A=∅
init a Disjiont Set for all verteies
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)
时间复杂度为O(E lgE)
用优先级队列维护边的权重当与A没有连边是权重设为为INF,个人认为实现较Kruskal 的算法繁琐。
简单的说就是给定一个连通的无向图,并给每一条边赋予权重w(u,v),在其中找出一个边集A,使得A链接所有的顶点,并使得这些V和这个边集A一起构成一棵树T=(V,A),并且边集权重最小。
书中描述了两种采用贪心策略的算法,简单地说就是设法找到一个切割(S,V−S)中的轻量及边,加入到边集A中。用通用伪代码描述就是
GENERIC-MST(G,w)
A=∅
while A does not form a spanning tree
find a edge (u,v) that is safe for A
A=A∪{(u,v)}
return A
下面介绍两种找到安全边的算法,一种是Kruskal 的算法,另一种是Prim 的算法,两种算法的复杂度是差不多的。
Kruskal 算法
此算法中A 是一个森林,而每次加入的边是链接两个不同分量的节点中权重最小的边。算法用一个并查集(DIsjiont Set) 维护不同的分量伪代码
MST-KRUSKAL(G,w)
A=∅
init a Disjiont Set for all verteies
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)
时间复杂度为O(E lgE)
Prim 算法
Prim 算法的思想是,A中的边构成的是一颗树,每次找切割(S,V−S),(集合S为A 中的边链接的顶点)中的一条轻量级边加入到A中。用优先级队列维护边的权重当与A没有连边是权重设为为INF,个人认为实现较Kruskal 的算法繁琐。
相关文章推荐
- 5.4.1 最小生成树(Minimum-Spanning-Tree,MST)
- 最小生成树 (Minimum Spanning Tree,MST) --- Prim算法
- hdu1162 Eddy's picture(图论:最小生成树-minimal spanning tree)
- 最小生成树 (Minimum Spanning Tree,MST) --- Kruskal算法
- MST(Minimum Spanning Tree,最小生成树)
- 最小生成树(MST,minimum spanning tree)
- [HDOJ 4896] Minimal Spanning Tree [最小生成树]
- Educational Codeforces Round 3 E. Minimum spanning tree for each edge 最小生成树+树链剖分+线段树
- HDU2489 Minimal Ratio Tree 【DFS】+【最小生成树Prim】
- UVALive 3662 Another Minimum Spanning Tree 曼哈顿最小距离生成树
- HDU 4408 Minimum Spanning Tree 最小生成树计数裸题
- {POJ}{3925}{Minimal Ratio Tree}{最小生成树}
- SDUT 周赛 2494 Minimum Spanning Tree? 最小生成树变形
- 2489 Minimal Ratio Tree 最小生成树(选边)
- hdu2489 Minimal Ratio Tree dfs+最小生成树
- HDU 2489 Minimal Ratio Tree(dfs+最小生成树)
- POJ 3925 Minimal Ratio Tree 最小生成树
- 数据结构与算法分析–Minimum Spanning Tree(最小生成树)
- Geeks : Kruskal’s Minimum Spanning Tree Algorithm 最小生成树
- 最小生成树(Minimum Spanning Tree)