图的应用—最小生成树

 

生成树:所有顶点均由边连接在一起,但不存在回路的图。(从任意点出发可以遍历到其他任何点,但是不能回到自身)

一个图可以有许多棵不同的生成树了,但是其中
        生成树的顶点个数和图的顶点个数相同
        生成树是图的极小连通子图,去掉一条边则非连通。
         一个有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算法  只计算变数

posted @   铜须的编程生活  阅读(268)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示