Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。”
@TOC

前言
Hello!小伙伴!
非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~
自我介绍 ଘ(੭ˊᵕˋ)੭
昵称:海轰
标签:程序猿|C++选手|学生
简介:因C语言结识编程,随后转入计算机专业,有幸拿过一些国奖、省奖...已保研。目前正在学习C++/Linux/Python
学习经验:扎实基础 + 多做笔记 + 多敲代码 + 多思考 + 学好英语!
机器学习小白阶段
文章仅作为自己的学习笔记 用于知识体系建立以及复习
知其然 知其所以然!
系列文章
【机器学习|数学基础】Mathematics for Machine Learning系列之图论(1):图的基本概念
【机器学习|数学基础】Mathematics for Machine Learning系列之图论(2):图的矩阵表示
【机器学习|数学基础】Mathematics for Machine Learning系列之图论(3):路径与连通
【机器学习|数学基础】Mathematics for Machine Learning系列之图论(4):有向图的连通性
【机器学习|数学基础】Mathematics for Machine Learning系列之图论(5):树及其性质
2.5 生成树算法
2.5.1 构造生成树的方法
求连通图的生成树的两种方法:
破圈法
- 从连通图G开始,若G中含有圈,则去掉圈上的一边
- 若G中还有圈,再去掉圈上的一条边
- 重复上面步骤,直至G中不含圈为止
- 最后得到的便是G的不含圈的连通生成子图,即生成树

避圈法
- 在G中任选一条边e1
- 然后找一条不与e1形成圈的边e2,得到{e1,e2}
- 再找一条不与{e1,e2}形成圈的e3,得到{e1,e2,e3}
- ...
- 当找不到一条边不与{e1,e2,e3,...,ei}形成圈,则G[{e1,e2,e3,...,ei}]是G的生成树

2.5.2 最小生成树算法
定义2.12
(1)图G的每条边赋予一个实数w(e),称为e的权
此时图G称为加权图
(2)设G1是G的生成子图,则G1的权定义为
w(G1)=∑e∈E(G1)w(e)
最小生成树
一个图的权最小的生成树称为最小生成树
权最大的生成树则称为最大生成树
Kruskal算法
T0:存放生成树的边的集合,初态为ϕ
C(T0):最小生成树的权,初值为零
VS:部分树的顶点集的集合,其初值为:{{v1},{v2},...,{vn}}
输入边的端点数组A(ε),B(ε)及边权数组w(ε)
算法步骤:
- T0←ϕ,C(T0)←0,VS←{{v1},{v2},...,{vn}},将E中的边按权从小到大排成队列Q
- 若∣VS∣=1,输出T0,C(T0),停止。 否则转下一步
- 从Q中取出排头边(u,v),并从Q中删除(u,v)
- 若u,v在V,S的同一元素V1中,则转3,否则分属两个集合V1,V2,进行下一步
- T0←T0∪{(u,v)},V←V1∪V2,VS←VS−{V1}−{V2}+V,C(T0)←C(T0)+C(u,v),转2
步骤4 中u,v在V,S的同一元素V1中,说明若添加u,v这条边会形成圈,不符合生成树条件,所以不添加,继续进行下一步
用Kruskal算法求下图的最小生成树

总结
- 先对图中所有边按照权进行排序,从小到大
- 从权小的边开始选,依次递增
- 只要选择的这条边加入之前已经选好后的图中不形成圈,则可以添加该边,否则不添加
定理2.10
Kruskal算法选得的边的导出子图是最小生成树
Prim算法
L(v):v到子树T0的直接距离
输入加权连通图的带权邻接矩阵C=(Cij)n×n
算法步骤:
- T0←ϕ,C(T0)←0,V′={v0}
- 对每一点v∈V−V′,L(v)←C(v,v0)(若(v,v0)∈/E,则C(v,v0)=∞)
- 若V′=V,输出T0,C(T0),停机。否则转下一步
- 在V−V′中找一点u,使得L(u)=min{L(v)|v∈(V−V′)},并记住V′中与u相邻的点为w,e=(w,u)
- T0←T0∪{e},C(T0)←C(T0)+C(e),V′←V′∪{u}
- 对所有v∈V−V′,若C(v,u)<L(u),则L(v)←C(v,u),否则L(v)不变
- 转3
用Prim算法求下图的最小生成树


总结
- 任意在图中选一个点,构成子树T0
- 然后找距离T0中所有顶点最近的一个顶点(边权最小)
- 找到符合最近的顶点然后加入T0
- 重复第二步
- 终止条件就是所有的顶点都添加至子树T0中
- 特别注意:每一步是找距离T0中所有顶点边权最小的一个顶点
定理2.11
Prim算法产生的图G(T0)是最小生成树
结语
说明:
- 参考于 课本《图论》
- 配合书中概念讲解 结合了自己的一些理解及思考
文章仅作为学习笔记,记录从0到1的一个过程
希望对您有一点点帮助,如有错误欢迎小伙伴指正
