考研复习--数据结构

考研复习专栏01

这是我第一次写帖子,主要也是写给自己看的,从一个小白(半小白)的角度对于这些问题进行理解,希望对于在现阶段刷真题过程中出现的一些问题进行总结和整理,算是以一种特殊的方式加深自己的印象吧。

今天的问题系列–数据结构

关于Dijkstra和Floyd算法

以下的D算法指Dijkstra算法,F指Floyd算法
首先我们要明确D算法是用于求单源最短路径,也就是从指定端点到其余各点的最短路径;而F较适用于每对顶点之间的最短路径。明确这一点了之后在题目进行设问的时候才能选用合适的办法进行求解

D算法

D算法思想:设置一个集合S记录已求得的最短路径的顶点,初始时把源点V1放在S里,集合S每并入一个新顶点Vi,都要修改V1到集合S中顶点当前的最短路径长度值,并不断作贪心算法选择来扩充这个集合,一个顶点属于集合S当且仅当从源点到该顶点的最短路径长度已知。
(好,这是标准的答案,是不是作为第一次看,看不懂。没关系,我也看不懂,因为这个是我拿来背诵以防万一的)
接下来通过一个题目,将D算法进行模拟,从过程理解,将会清晰很多。
D算法例题
这个题目的设问是求用D算法求解从V1到各顶点最短路径。
我们从V1开始进行求解
为什么画表格的时候不画V1呢,因为从V1开始画V1没有意义
分析:从图中我们可以看出与V1相连的只有V2与V5,没有直接路径的我们以无穷大表示,此处用-代替无穷大,路径各为16与3,写入第一轮表中

结点第一轮第二轮第三轮第四轮第五轮
V216
V3-
V4-
V53
V6-
集合{V1,V5}

这个时候我们对第一轮进行比较,选出最小的一条路径即为V1-V5,路径长为3,此时V1-V5的最短路径已经找到,往后就不考虑该对顶点路径。
注意,接下来的最短路径根据贪心算法,要在V1-V5的基础上进行拓展,即新拓展的边要从V5出发

结点第一轮第二轮第三轮第四轮第五轮
V21616
V3--
V4-10(3+7)
V53
V6-8(3+5)
集合{V1,V5}{V1,V5,V6}

分析:从V5出发的顶点连接到V6与V7,路径分别为5与7,此时对表中路径值进行更新(V1-V2如果没有新值更新即保留原值参与比较)
此时对三个数进行比较发现V1-V5-V6的路径值是最短的,即第二轮锁定V1-V5-V6为V1-V6的最短路径为8

结点第一轮第二轮第三轮第四轮第五轮
V21616151514
V3--2011
V4-10(3+7)10
V53
V6-8(3+5)
集合{1,5}{1,5,6}{1,5,6,4}{1,5,6,4,3}{1,5,6,4,3,2}

在第三轮分析时我们可以发现从V6出发连接V2,V3,我们就需要注意从V1-V2此时是否存在比之前记录的更短路径,这也是非常容易被忽略的,很明显V1-V5-V6-V2V比V1-V2要短,我们就要注意进行更新。
第三,第四轮分析也依照之前的第一第二轮一般,每次在最短路径上进行拓展,比较选出最短的一条路径,更新表格,即可得到最终最短路径。
PS:表中的最后一行集合意思不是路径,只是囊括的节点,不要搞混了

F算法

同样,F算法思想:设矩阵A为图的邻阶矩阵,以顶点K为中间节点,K取1-n(n为图中顶点个数),对图中所有顶点的{i,j}进行如下检测和修改:如果A[i][j]>A[i][k]+A[k][j] 则将A[i][j]更改为A[i][k]+A[k][j]的值,直到遍历完所有顶点时候
(看完更不懂了,同样,这个是我拿来背的,我们还是理解其中模拟过程比较重要)
什么意思呢,也就是我将会用几个矩阵循序渐进的表示不断将1号,2号,3号节点涵盖在我考虑的范围内,观察当按照这个次序两顶点之间的值是否变短,从而写出两顶点之间最短路径
(那么根据我刚刚说的,是不是觉得其实F算法也可以求固定顶点到其余顶点最短路径,是的是可以的,只要找出矩阵中某一指定顶点行即可,但是,有更快的为啥要用慢的呢)
我们还是根据一个题目进行分析。
在这里插入图片描述题目提问:求各顶点间的最短路径
简单粗暴,那么首先我们能写出初始A0矩阵表示,此时各顶点之间的路径,没有直接路径的我们以无穷大表示,此处用-代替无穷大。

1234
1015-3
215027
3-2012
437120

那么A1矩阵则是在V0基础上将V1囊括进集合内再对各顶点之间的距离进行重新比较,由于分析过后发现没变,所以我就不写了
到了A2矩阵我们再在V1的基础上将V2囊括进行考虑发现此时由于有了V2作桥梁,V1-V3进行了连通,同时V3-V4的路径由于增添了V2存在V3-V2-V4=9小于原本的12,就要对矩阵A3进行更新。

1234
101517*3
215027
317*209*
4379*0

以此类推,V3相较于V2没变
V4更新了V1-V3路径存在更短的V1-V4-V2-V3

1234
1010*12*3
210*027
312*209
43790

当然我们为了更好的对路径进行展示也可以在每次推导的时候对路径进行类似的矩阵记录,命名为Path矩阵

1234
10142142314
224102324
33241320324
441424230

好的,终于结束了,我个人认为对于F算法的推导需要更多的耐心与细心,不能急躁,所谓慢工出细活
至于更新,佛系更吧,出这篇帖子全因为我昨天写题把Floyd算法给忘记了。。。即使要更新估计也就是,对于一些我个人反复错过的点进行更新。
考研加油!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值