最小生成树(Minimum Spanning Tree)(Prim算法)
2016-04-05 11:21
211 查看
1. 什么是最小生成树(Minimum Spanning Tree)
2. 贪心算法:
1) 什么是“贪”:每一步都要最好的
2) 什么是“好”:权重最小的边
3) 需要约束:
a) 只能用图里有的边
b) 只能正好用掉|v| - 1条边
c) 不能有回路
3. Prim算法(让一棵小树长大):
Dijkstra和Prim算法和类似,如下:
Dijkstra算法:
Prim算法和Dijkstra算法类似地方:
Prime完整伪码:
1) dist[V] = E(s, v)或正无穷
2) parent[s] = -1
T = O(|V|2) - 稠密图合算
2. 贪心算法:
1) 什么是“贪”:每一步都要最好的
2) 什么是“好”:权重最小的边
3) 需要约束:
a) 只能用图里有的边
b) 只能正好用掉|v| - 1条边
c) 不能有回路
3. Prim算法(让一棵小树长大):
Dijkstra和Prim算法和类似,如下:
Dijkstra算法:
Void Dijkstra(Vertex s) { while(1) { V = 未收录顶点中dist最小者; if( 这样的V不存在 ) break; collected[V] = true; for(V的每个邻接点 W ) { if(collected[W] == false) { if(dist[V] +E<v, w> < dist[W]) { dist[W] = dist[V] + E<v,w>; path[W] = V; } } } } }
Prim算法和Dijkstra算法类似地方:
void Prim() { MST = {s}; while(1) { V = 未收录顶点中dist最小者; if( 这样的V不存在 ) break; 将V收录进MST: for( V的每个邻接点W ) { if( W未被收录 ) { dist[W] = E(v, w); parent[W] = V; } } } }
Prime完整伪码:
void Prim() { MST ={S}; while(1) { V = 未收录顶点中dist最小者; if(这样的V不存在) break; 将V收录进MST:dist[V] = 0 for( V的每个邻接点W ) { if( dist[W] != 0 ) { if(E(v,w) < dist[W]) { dist[W] = E(v,w); parent[W] = V; } } } } if(MST中收到的顶点不到|V|个) Error(“生成树不存在”); }5. Prim注意点:
1) dist[V] = E(s, v)或正无穷
2) parent[s] = -1
T = O(|V|2) - 稠密图合算
相关文章推荐
- 大型网站之网站静态化(综合篇)
- sql server生成脚本
- 浏览器快捷键
- 一些面试题的思路逻辑
- Windows下msysGit使用及相关配置
- SegmentControl的基本设置
- OC与swift的相互调用
- 二叉树(2)层次遍历
- [LeetCode] Employees Earning More Than Their Managers 员工挣得比经理多
- 2015.7.3, 杭州……产品级敏捷案例研究
- 分布式存储技术及应用
- 关于arguments对象以及函数的柯里化;
- 我是一个线程
- [New learn]AutoLayout调查基于code
- 使用的前台开发在线工具
- [OI]省选前模板整理
- 《构建之法》第一至三章
- UVA 10048 A - Wormholes
- 磁盘问题引起的MySQL问题
- java web表单提交ajax参数封装方法