码迷,mamicode.com
首页 > 编程语言 > 详细

算法 - 最小生成树

时间:2020-02-02 01:19:09      阅读:81      评论:0      收藏:0      [点我收藏+]

标签:lib   baidu   video   tps   算法   生成   emma   single   技术   

什么是最小生成树

? 一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边。最小生成树可以用kruskal(克鲁斯卡尔)算法或prim(普里姆)算法求出。

最小权重生成树又是什么

? 在一给定的无向图G = (V, E) 中,(u, v) 代表连接顶点 u 与顶点 v 的边(即),而 w(u, v) 代表此的权重,若存在 T 为 E 的子集(即)且为无循环图,使得

的 w(T) 最小,则此 T 为 G 的最小生成树

技术图片

最小生成树其实是最小权重生成树的简称。

实际应用场景

技术图片

例如:要在n个城市之间铺设光缆,主要目标是要使这 n 个城市的任意两个之间都可以通信,但铺设光缆的费用很高,且各个城市之间铺设光缆的费用不同,因此另一个目标是要使铺设光缆的总费用最低。这就需要找到带权的最小生成树。

算法实现

我们首先看我们的无向图 , 需要找到一个最小权重生成树

技术图片

kruskal 算法

其基本思想就是把每条边都拿出来, 然后按照权重排序, 将这些边组合起来, 要求的是组合过程中不可以形成环, 形成环则放弃这条边

技术图片

基本实现就是这个了, 打错的是不符合要求的. 到最后就会形成最小权重生成树

Prim 算法

其基本思想就比较麻烦, 我们先看一张图

技术图片

这里有四行数据,

第一行各个节点.

第二行是节点是否被选中

第三行是节点与父亲节点之间的距离(权重) , 比如 a-b ,如果a被选了,那么 b的父亲就是a,就是这个意思,ab之间的权重就是这个值, 而且b不一定只有一个父亲

第四行就是父亲节点是谁了

所以开始吧

技术图片

我们首先以0位起始位置 , 0标记为true, 开始往前推进, 0和1,7连着. 0-7=8,0-1=4 , 所以这一次选0-1 , 此时 标记1为true ,

01节点连着的有 0-7=8,1-7=11,1-2=8 ,此时0-7与1-2相同, 此时选择父节点小的为选择对象 , 此时将7标记为true.

071 节点连着 1-2=8 , 7-6=1 , 7-8=7 , 所以选择 7-6 ,标记6为true , 就一直标记到全部为true为止.

这个思路就是我上述讲的.

如果你还是不理解可以看看这个视频 , 链接 : https://www.bilibili.com/video/av47042691?from=search&seid=15424121794388295524

算法 - 最小生成树

标签:lib   baidu   video   tps   算法   生成   emma   single   技术   

原文地址:https://www.cnblogs.com/anthony-dong/p/12250786.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!