您的位置:首页 > 其它

最小生成树Minimum Spanning Tree

2016-02-25 13:04 323 查看
把一场败仗存草稿以后,开始收集一些看过的,打算做整理

先从和第一篇有联系的「贪心」「图论」「路径」「动规」算法开始

参考学习

http://blog.csdn.net/heavenboya/article/details/6654778

http://www.acmerblog.com/greedy-kruskal-spanning-tree-mst-5326.html

1.生成树Spanning Tree

「图论」图G=(V, E),包含所有顶点的极小连通子图

V个顶点,(V – 1)条边

(从不同顶点出发,走不同的分支,都可以得到不同的生成树)

此图可能是「强连通」、「有根」、「有向」、「非连通」

若“非连通”或“非强连通的有向图”,则可能只得到的「生成森林」

1)DFS生成树

优先往深处摸索,触底则回到上一节点

*「DFS」「BFS」「回溯」「剪枝pruning」

2)BFS生成树

优先遍历并保存节点的生成边,之后向深处迈步

2.最小生成树MST

最小 =「路径加权」,也称最小权重生成树

(生成树的所有边的权重总和最小)



1)Kruskal算法

a.依权重排序所有边

b.从最小的边开始加入,检测是否成环

c.重复b,直到加入了(v-1)条边

猴子也能懂:上帝视角,排序加边

O(ElogE),快排

「成环检测」

将所有点V的集合,拆为已扩展v1 { } 和未扩展v2 { }

检测边的两个顶点是否都在已扩展的v1中,若都在则成环

否则,更新两个子集和

猴子也能懂:已未拆集,此消彼长

*「并查集Union Find」「路径压缩」

ALG

2)Prim算法

a.某点出发,其相连边「候选」

b.选最小侯选边,连接新的顶点,其相连边候选

c.检测目的地相同的侯选边,比较并留下小边

d.重复b,直到加入了(v-1)条边

猴子也能懂:步步为营,优胜劣汰

*「Dijkstra算法」与Prim有些像,不断优化源点所有点的最短路径距离,攻城拔寨

ALG

O(N^2)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法