最小生成树(Minimum Spanning Tree)
- 简称MST
- 也成为最小权重生成树(Minimum Weight Spanning Tree)、最小支撑树
- 是所有生成树中,总权值最小的那棵
- 适用于有权的连通图(无向)
例子
- 最小生成树在许多领域都有重要的作用,例如
- 要在n个城市之间铺设光缆,使它们都可以通信
- 铺设光缆的费用很高,且各个城市之间因为距离不同等因素,铺设光缆的费用也不同
- 如何使铺设光缆的总费用最低?
- 如果图的每一条边的权值都互不相同,那么最小生成树将只有一个,否则可能会有多个最小生成树
- 求最小生成树的2个经典算法
- Prim(普里姆算法)
- Kruskal(克鲁斯克尔算法)
切分定理
-
切分(Cut):把图中的节点分为两部分,称为一个切分
-
下图有个切分C=(S,T),S={A,B,D},T={C,E}
-
横切边(CrossingEdge):如果一个边的两个顶点,分别属于切分的两部分,这个边称为横切边
-
切分定理:给定任意切分,横切边中权值最小的边必然属于最小生成树
prim算法-执行过程
- 假设G=(V,E)是有权的连通图(无向),A是G中最小生成树的边集
- 算法从S={uo}(uoEV),A={}开始,重复执行下述操作,直到S=V为止
- 找到切分C=(S,V-S)的最小横切边(uo,vo)并入集合A,同时将vo并入集合S
- 找到切分C=(S,V-S)的最小横切边(uo,vo)并入集合A,同时将vo并入集合S
- 算法从S={uo}(uoEV),A={}开始,重复执行下述操作,直到S=V为止