最小生成树问题
树
连通图G=(V,E)G=(V,E)G=(V,E),若G中不含任何回路,则称G为树。
∣V∣=1|V |=1∣V∣=1时称之为平凡树
![![[Pasted image 20240826122021.png]]](https://i-blog.csdnimg.cn/direct/8f0dc61d54f9432fb3d627309fdc3697.png)
生成树
G=(V,E)G=(V,E)G=(V,E),若G的一个生成子图是一棵树,则称之为G的一棵生成树,或者支撑树
![![[Pasted image 20240826122236.png]]](https://i-blog.csdnimg.cn/direct/0d06318c1b6a443fa4f494e514dc4b27.png)
定理
任何连通图至少有一棵生成树
![![[Pasted image 20240826122331.png]]](https://i-blog.csdnimg.cn/direct/eada8ae2c80d4a8fa1e48a8d8d18b961.png)
最小生成树
无向图G的所有生成树中,边的权值总和最小的称为G的最小生成树,或最短树
![![[Pasted image 20240826122525.png]]](https://i-blog.csdnimg.cn/direct/fc96d7eda3e949d78a660c72790be467.png)
性质
假设一个图中存在最小生成树,并且该图具有n个节点,m条边,则该图的最小生成树一定含有n个节点,并且具有n-1条边
最小生成树构造方法
- Kruskal算法
每次选择一条最小且不会构成回路权边直至构成一个生成树 - Prim算法
从一个结点的子图开始构造生成树:
选择连接当前子图和子图外结点的最小权边,将相应结点和边加入子图,直至将所有结点加入子图。
构造最小生成树Kruskal算法
Kruskal算法基本思想
- 按所有边权值排序,升序(从小到大)
- 按排好序的边集合,选择一条边加入生成树
贪心准则:不会产生环路
按耗费递增顺序考察每条边
- 若产生环路,丢弃
- 否则,加入
Kruskal算法示例
![![[Pasted image 20240826124506.png]]](https://i-blog.csdnimg.cn/direct/00993dbbe7414ca7a9f2bb34c7e24542.png)
B=(112234452334556612354321) B=\begin{pmatrix} 1&&1&&2&&2&&3&&4&&4&&5 \\ 2&&3&&3&&4&&5&&5&&6&&6 \\ 1&&2&&3&&5&&4&&3&&2&&1 \end{pmatrix} B= 121132233245354

最低0.47元/天 解锁文章
1637

被折叠的 条评论
为什么被折叠?



