数据结构笔记——最小生成树

写在前面:科班出身,应届考研党,愿21考研成功上岸,冲冲冲!

目录

知识总览

一、生成树

二、广度优先生成树

三、深度优先生成树

四、最小生成树(最小代价树)

五、Prim算法(普里姆)

六、Kruskal算法(克鲁斯卡尔)

七、Prim算法 vs Kruskal算法

八、Prim算法的实现思想

九、Kruskal算法的实现思想

十、总结

知识总览

数据结构笔记——最小生成树_第1张图片

一、生成树

连通图生成树包含图中全部顶点的一个极小连通子图。(边尽可能的少,但要保持连通)

若图中顶点树为n,则它的生成树含有n-1条边。对生成树而言,若砍去它的一条边,则会变成非连通图,若加上一条边则会形成一个回路。

数据结构笔记——最小生成树_第2张图片

二、广度优先生成树

数据结构笔记——最小生成树_第3张图片

三、深度优先生成树

数据结构笔记——最小生成树_第4张图片

四、最小生成树(最小代价树)

道路规划要求:所有地方都连通,且成本尽可能的低

数据结构笔记——最小生成树_第5张图片

数据结构笔记——最小生成树_第6张图片

对于一个带权连通无向图G=(V,E),生成树不同,每棵树的权(即树中所有边上的权值之和)也可能不同。设R为G的所有生成树的集合,若T为R中边的权值之和最小的生成树,则T成为G的最小生成树

①最小生成树可能有多个,但边的权值之和总是唯一且最小的。

②最小生成树的边数= 顶点树- 1。砍掉一条则不连通,增加一条边则会出现回路。

③如果一个连通图本身就是一棵树,则其最小生成树就是它本身

④只有连通图才有生成树,非连通图只有生成森林

五、Prim算法(普里姆)

从某一个顶点开始构建生成树;每次将代价最小的新顶点纳入生成树,知道所有顶点的纳入为止。

数据结构笔记——最小生成树_第7张图片数据结构笔记——最小生成树_第8张图片

数据结构笔记——最小生成树_第9张图片数据结构笔记——最小生成树_第10张图片

数据结构笔记——最小生成树_第11张图片数据结构笔记——最小生成树_第12张图片

数据结构笔记——最小生成树_第13张图片数据结构笔记——最小生成树_第14张图片

数据结构笔记——最小生成树_第15张图片数据结构笔记——最小生成树_第16张图片

数据结构笔记——最小生成树_第17张图片

数据结构笔记——最小生成树_第18张图片

六、Kruskal算法(克鲁斯卡尔)

每次选择一条权值最小的边,使这条边的两头连通(原本已经连通的就不选),直到所有结点都连通

数据结构笔记——最小生成树_第19张图片数据结构笔记——最小生成树_第20张图片

数据结构笔记——最小生成树_第21张图片数据结构笔记——最小生成树_第22张图片

数据结构笔记——最小生成树_第23张图片数据结构笔记——最小生成树_第24张图片

数据结构笔记——最小生成树_第25张图片数据结构笔记——最小生成树_第26张图片

数据结构笔记——最小生成树_第27张图片数据结构笔记——最小生成树_第28张图片

七、Prim算法 vs Kruskal算法

Prim:

从某一个顶点开始构建生成树;每次将代价最小的新顶点纳入生成树,知道所有顶点的纳入为止。

时间复杂度:O(|V|^2),适合用于边稠密图

Kruskal:

每次选择一条权值最小的边,使这条边的两头连通(原本已经连通的就不选),直到所有结点都连通

时间复杂度:O(|E|log2|E|)适合用于边稀疏图

八、Prim算法的实现思想

初始:从V0开始

数据结构笔记——最小生成树_第29张图片

第1轮:循环遍历所有个结点,找到lowCost最低的,且还没加入树的顶点

数据结构笔记——最小生成树_第30张图片

数据结构笔记——最小生成树_第31张图片

再次循环遍历,更新还没加入的各个顶点的lowCost值

数据结构笔记——最小生成树_第32张图片

第2轮:循环遍历所有个结点,找到lowCost最低的,且还没加入树的顶点

数据结构笔记——最小生成树_第33张图片

数据结构笔记——最小生成树_第34张图片

数据结构笔记——最小生成树_第35张图片

第3轮:循环遍历所有个结点,找到lowCost最低的,且还没加入树的顶点

数据结构笔记——最小生成树_第36张图片

数据结构笔记——最小生成树_第37张图片

第4轮:循环遍历所有个结点,找到lowCost最低的,且还没加入树的顶点

数据结构笔记——最小生成树_第38张图片

数据结构笔记——最小生成树_第39张图片

数据结构笔记——最小生成树_第40张图片

第5轮:循环遍历所有个结点,找到lowCost最低的,且还没加入树的顶点

数据结构笔记——最小生成树_第41张图片

九、Kruskal算法的实现思想

初始:将各条边按权值排序

数据结构笔记——最小生成树_第42张图片

第1轮:检查第1条边的两个顶点是否连通(是否属于同一个集合),不连通,连起来

数据结构笔记——最小生成树_第43张图片

数据结构笔记——最小生成树_第44张图片

第2轮:检查第2条边的两个顶点是否连通(是否属于同一个集合)

数据结构笔记——最小生成树_第45张图片

数据结构笔记——最小生成树_第46张图片

第3轮:检查第3条边的两个顶点是否连通(是否属于同一个集合)

数据结构笔记——最小生成树_第47张图片

数据结构笔记——最小生成树_第48张图片

第4轮:检查第4条边的两个顶点是否连通(是否属于同一个集合)

数据结构笔记——最小生成树_第49张图片

第5轮:检查第5条边的两个顶点是否连通(是否属于同一个集合),已连通,跳过

数据结构笔记——最小生成树_第50张图片

第6轮:检查第6条边的两个顶点是否连通(是否属于同一个集合)

数据结构笔记——最小生成树_第51张图片

十、总结

数据结构笔记——最小生成树_第52张图片

你可能感兴趣的:(考研数据结构)