图的应用—最小生成树
生成树:所有顶点均由边连接在一起,但不存在回路的图。(从任意点出发可以遍历到其他任何点,但是不能回到自身)
一个图可以有许多棵不同的生成树了,但是其中
生成树的顶点个数和图的顶点个数相同
生成树是图的极小连通子图,去掉一条边则非连通。
一个有n个顶点的连通图的生成树有n-1条边(反之不一定),再加一条边必然形成回路。则其中任意两个顶点间的路径是唯一的。
1.无向图的生成树
最小生成树:给定一个无向网络,在该网的所有生成树中,使得各边权值之和最小的那颗生成树称为该网的最小生成树,也叫最小代价生成树。(最小生成树不唯一)
应用:n个城市之间建立通讯网,求最小花费
顶点——表示城市有n个
边——表示线路,有n-1条
边的权值——表示线路的经济代价
连通网——表示n个城市间通讯网
算法实现
构造最小生成树的算法都利用了MST的性质
MST性质:设N = (V, E) 是一个连通网,U是顶点集V的一个非空子集。若边(u,v)是一条具有最小权值的边,其中u∈U,v∈V-U,则必存在某一颗包含边(u,v)的最小生成树。
理解:将集合U和其他所有结点构成的集合V-U路径之间的权值比较,找到最小的权值路径,并将其加入集合U中,则其一定包含在最小生成树中。
1.Prim(普里姆)算法
理解:初始随机选择一个顶点,找出其和其他的结点的最小权值。然后加入,依次循环,直到所有结点都加入其中。
2.Kruskal(克鲁斯卡尔)算法
理解:初始化将所有顶点加入其中,依次从小到大的权值加入,判断每一条权值是否已经有重复顶点,如果有这舍去,取下一条边。
(3)两种算法的比较
时间算法比较:Prim算法 每一个结点和其他会比较,一共有n个结点,则为n2
Kruskal算法 只计算变数
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)