最小生成树问题
来源:互联网 发布:php软件公司源码 编辑:程序博客网 时间:2024/06/05 20:16
--------------------siwuxie095
最小生成树问题
这里介绍最小生成树(Minimum Spanning Tree)问题
所谓生成树,就是对于一个完全连通的带权无向图,用V-1 条边连接
V 个顶点而形成的树,即为该图的生成树,如上图所示
而在所有的生成树中,边上的权值相加最小的生成树,即为最小生成树,
如何找到一张图中的最小生成树,就是最小生成树问题
「最小生成树是一副连通加权无向图中一棵权值最小的生成树」
最小生成树问题,在实际生活中有很多应用,如:电缆的布线设计
通过发电站将电输送到每一个节点,其实并不需要每两个节点之间
都有电缆连接,只需要保证每个节点都有电即可。这种情况下,电
缆布线的最优设计就是找到这张图的最小生成树,让布置电缆的总
费用最低
即最小生成树提供了一个各个节点之间均连通,同时连通的总费用
又最小的方案
对于最小生成树问题,通常针对的是连通带权无向图,所以最小生
成树必须要带权,不然就没有最小的概念了
如果一个图不连通,也可以分别在每个连通分量上求各自的最小生
成树,最后得到的通常叫做最小生成森林
将最小生成树问题抽象出来,即在有V 个顶点的连通带权无向图
中找V-1 条边,这 V-1 条边必须将 V 个顶点连接起来,且使得最
终的总权值最小
1)找V-1 条边
2)连接V 个顶点
3)总权值最小
切分定理
实现最小生成树的Prim算法和 Kruskal 算法都不约而同的应用了
切分定理(Cut Property)
在介绍切分定理之前,首先应该知道什么叫做切分。把图中的顶点
分为两部分,称为这张图的一个切分(Cut)
当定义了一个图的切分之后,就可以得到一个新的概念:
如果一条边的两个端点,属于切分不同的两个阵营,就称
这条边为横切边(Crossing Edge)
切分定理:
给定任意切分,横切边中权值最小的边必然属于最小生成树
如:在下图的切分中,横切边0-7 是权值最小的边,权值为
0.16,所以 0-7 一定是这张图的最小生成树中的一条边
切分定理的简单证明:
前提:切分将一个图分成了两部分,中间用横切边进行连接。
根据切分定理可知,横切边中权值最小的边,一定属于最小
生成树
反证法:
令三条横切边分别为e、f、g,且 e 为权值最小的横切边,
T 为图的最小生成树
假设T 包含 f,而不包含 e,那么如果将 e 加入 T,那么
e 和 f 就必然形成了环,不再是生成树
显然,e 的权值小于 f,那么用 e 替换 f 就可以形成一个
权值小于T 的生成树,与 T 为最小生成树矛盾
【made by siwuxie095】
- 最小生成树问题
- 最小生成树问题
- 最小生成树问题
- 最小生成树问题
- 最小生成树问题
- 最小生成树问题
- 最小生成树问题
- 最小生成树问题
- 最小生成树问题
- 最小生成树问题
- 最小生成树问题
- C++最小生成树问题
- 布线问题-最小生成树
- 最小生成树问题【PAT】
- 关于最小生成树问题
- 复习最小生成树问题
- 数据结构--最小生成树问题
- kruskal最小生成树问题
- String类的部分实现和测试
- 2048小游戏
- struts2_ognl和valueStack简介
- [bigdata] IntelliJ run project
- Toolbar的使用
- 最小生成树问题
- POJ 2192
- 欢迎使用CSDN-markdown编辑器
- shell
- vi编辑器
- python 元组
- Prim算法
- shell 命令执行顺序 一
- shell执行命令顺序 二