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的一个过程
希望对您有一点点帮助,如有错误欢迎小伙伴指正