算法速成(十五)图之“最小生成树”和“最短路径”

今天是大结局,说下“图”的最后一点东西,“最小生成树“和”最短路径“。

一: 最小 生成树

1. 概念

首先看如下图,不知道大家能总结点什么。

对于一个连通图G, 如果其全部顶点和一部分边构成一个子图G1,当G1满足:

① 刚好将图中所有顶点连通。② 顶点不存在回路。则称G1就是G的“生成树”。

其实一句话总结就是:生成树是将原图的全部 顶点以最小的边连通的子图,这不,如下的连通图可以得到下面的两个生成树。

② 对于一个带权的连通图,当生成的树不同,各边上的权值总和也不同,如果某个生成树的权 值最小,则它就是“最小生成树”。

2. 场景

 实际应用中“最小生成树”还是蛮有实际价值的,教科书上都有这么一句 话,若用图来表示一个交通系统,每一个顶点代表一个城市,

边代表两个城市之间的距离,当 有n个城市时,可能会有n(n-1)/2条边,那么怎么选择(n-1)条边来使城市之间的总距离最小,其实它

的抽象模型就是求“最小生成树”的问题。

3. prim算法

当然如何求“最小生 成树”问题,前人都已经给我们总结好了,我们只要照葫芦画瓢就是了,

第一步:我们建立集 合“V,U",将图中的所有顶点全部灌到V集合中,U集合初始为空。

第二步: 我们将V1放 入U集合中并将V1顶点标记为已访问。此时:U(V1)。

第三步: 我们寻找V1的邻接点 (V2,V3,V5),权值中发现(V1,V2)之间的权值最小,此时我们将V2放入U集合中并标记V2为已访问,

此时为U(V1,V2)。

第四步: 我们找U集合中的V1和V2的邻接边,一阵痉挛后,发现 (V1,V5)的权值最小,此时将V5加入到U集合并标记为已访问,此时

U的集合元素为(V1,V2 ,V5)。

第五步:此时我们以(V1,V2,V5)为基准向四周寻找最小权值的邻接边,发现(V5 ,V4)的权值最小,此时将V4加入到U集合并标记

为已访问,此时U的集合元素为(V1,V2,V5 ,V4)。

第六步: 跟第五步形式一样,找到了(V1,V3)的权值最小,将V3加入到U集合中并 标记为已访问,最终U的元素为(V1,V2,V5,V4,V3),

时间: 2024-09-13 10:17:44

算法速成(十五)图之“最小生成树”和“最短路径”的相关文章

算法速成(五)五大经典查找之哈希查找

大家可否知道,其实查找中有一种O(1)的查找,即所谓的秒杀. 哈希查找: 对的, 他就是哈希查找,说到哈希,大家肯定要提到哈希函数,呵呵,这东西已经在我们脑子里面形成 固有思维了.大家一定要知道"哈希"中的对应关系. 比如说: "5"是一个要保存 的数,然后我丢给哈希函数,哈希函数给我返回一个"2",那么此时的"5" 和"2"就 建立一种对应关系,这种关系就是所谓的"哈希关系",在实际应

算法系列15天速成——第十五天 图【下】(大结局)

一: 最小生成树 1. 概念     首先看如下图,不知道大家能总结点什么.     对于一个连通图G,如果其全部顶点和一部分边构成一个子图G1,当G1满足:        ① 刚好将图中所有顶点连通.②顶点不存在回路.则称G1就是G的"生成树".            其实一句话总结就是:生成树是将原图的全部顶点以最小的边连通的子图,这不,如下的连通图可以得到下面的两个生成树.        ② 对于一个带权的连通图,当生成的树不同,各边上的权值总和也不同,如果某个生成树的权值最小,

x264代码剖析(十五):核心算法之宏块编码中的变换编码

x264代码剖析(十五):核心算法之宏块编码中的变换编码           为了进一步节省图像的传输码率,需要对图像进行压缩,通常采用变换编码及量化来消除图像中的相关性以减少图像编码的动态范围.本文主要介绍变换编码的相关内容,并给出x264中变换编码的代码分析.   1.变换编码           变换编码将图像时域信号变换成频域信号,在频域中图像信号能量大部分集中在低频区域,相对时域信号,码率有较大的下降. H.264对图像或预测残差采用4×4整数离散余弦变换技术,避免了以往标准中使用的通

经典算法题每日演练——第十五题 并查集

原文:经典算法题每日演练--第十五题 并查集     这一篇我们看看经典又神奇的并查集,顾名思义就是并起来查,可用于处理一些不相交集合的秒杀. 一:场景     有时候我们会遇到这样的场景,比如:M={1,4,6,8},N={2,4,5,7},我的需求就是判断{1,2}是否属于同一个集合,当然实现方法 有很多,一般情况下,普通青年会做出O(MN)的复杂度,那么有没有更轻量级的复杂度呢?嘿嘿,并查集就是用来解决这个问题的.   二:操作   从名字可以出来,并查集其实只有两种操作,并(Union)

经典算法题每日演练——第二十五题 块状链表

原文:经典算法题每日演练--第二十五题 块状链表 在数据结构的世界里,我们会认识各种各样的数据结构,每一种数据结构都能解决相应领域的问题,每一种数据结构都像 是降龙十八掌中的某一掌,掌掌毙命... 当然每个数据结构,有他的优点,必然就有它的缺点,那么如何创造一种数据结构 来将某两种数据结构进行扬长避短,那就非常完美了.这样的数据结构也有很多,比如:双端队列,还有就是今天讲的 块状链表,    我们都知道 数组 具有 O(1)的查询时间,O(N)的删除,O(N)的插入...            

算法速成(十)栈

今天跟大家聊聊栈,在程序设计中,栈的使用还是非常广泛的,比如有"括号匹配问题","html 结构匹配问题". 所以说掌握了"栈"的使用,对我们学习算法还是很有帮助的. 一 : 概念 栈,同样是一种特殊的线性表,是一种Last In First Out(LIFO)的形式,现实中有 很多这样的例子, 比如:食堂中的一叠盘子,我们只能从顶端一个一个的取. 二:存 储结构 "栈"不像"队列",需要两个指针来维护,栈

陈冠希穿精神病人服拍MV低温狂奔十五公里(图)

陈冠希为新歌<Running>(中文译:跑,逃)拍摄MV. 陈冠希穿精神病人服 陈冠希看拍摄效果 陈冠希饰演想挣脱却跑不掉甚至还被关在箱子里的精神病患 新浪娱乐讯 陈冠希(Edison)继先前的新歌<Mr.Sandman>(中文译名:造梦先生)后,又一新力作<Running>(中文译:跑,逃),同样会收录在月底发行的新专辑<Confusion>中.日前,他为<Running>拍MV穿上精神病院限制病人行动所用的约束衣,饰演想挣脱却跑不掉甚至还被关

让电脑启动更快的十五招

嫌脑启动太慢是每个脑迷的共同心病,让脑启动更快是大家的共同心愿,本人在使用脑过程中总结了加快脑启动速度的"十五式",与您分享. 一.BIOS的优化设置 在BIOS设置的首页我们进入"Advanced BIOS Features"选项,将光标移到"Frist Boot Device"选项,按"PageUP"和"PageDOWN"进行选择,默认值为"Floppy",这表示启动时系统会先从软驱

Flex与.NET互操作(十五)

Flex与.NET互操作(十五):使用FluorineFx中的字节数组(ByteArray)实现图片上传 前几天一位朋友问我一个问题,他说:"我用HTTP接口或是WebService接口可以实现图片上传功能,那么用FluorineFx如何实现图片 上传功能呢?",其实仔细看官方文档和示例程序的自己都可以找到答案,实现上传可以有很多种实现,这里我以官方所提供是示例为基 础稍加改动,通过ByteArray类实现图片上传. 首先建立FluorineFx库和网站,在远程服务器类里添加一个处理文