学习总结与体会

【Dijkstra】
在这里插入图片描述
理解部分:此算法的目的,就是找出任意两点之间的最短路径,假定我们选择A点为定点,将A点的状态设置为已遍历,此时并不知道A点与其他点的最短路径是多少,因此我们将A点与各点的最短路径设置为无穷大,之后从未经遍历的点&&目前正处在的点(也就是A点)的邻点(若有多个邻点则选择距离较近的点) 开始遍历,每遍历一个点就记录下A点与此点的距离,若小于目前的最短路径则更新最短路径并将此点的状态设置为已遍历,这样就可以遍历所有的点并记录任意两点之间的最短路径
感想:Dijkstra是一种贪心算法,每一次步骤都是选出与已经访问过的节点距离最短的节点,过程则是不断地去重复这个步骤

【Floyd】

理解部分:与Dijkstra算法目的一样,都是求任意两点之间的最短路径,采用动态规划的方法,初始建立n阶矩阵,以Aij 来表示 i点和j点之间的距离,之后进行n次迭代**Aij = min(Aij,Aik+Aki)(k = 1,2,3,…,n)**此时k可理解为ij穿过的节点

感想:虽然与Dijkstra的时间复杂度相同都是O(n3),但Floyd算法实现的过程所需的运算量更小不用像Dijkstra算法一样一个个假定定点一个一个来,而是同时一次性全部求出来

【Prime】
在这里插入图片描述
理解部分:任意找1个节点,将该节点的状态设置为已遍历,寻找与该节点共边的最小的节点,将该节状态设置为已遍历,并记录下2节点的距离,之后在两节点中寻找共边的距离最小的未遍历节点,找到第三节点,将该节点状态设置为已遍历的状态,并记录距离,直到所有节点遍历完成,将记录下来的距离累加即得到最小生成树
【Kruskal】
理解部分:从最小的边开始,记录下最小的边的距离,并将边上的点状态设置为已遍历,之后寻找第二小的边,判断该边上是否存在已遍历的点,若没有,则将该边上的点设置为已遍历,记录边距离,重复该步骤直至所有节点均以被遍历

感想:两种算法的区别为一个从点的角度运算,一个从边开始运算,当遇到边多的时候则时候用prime,边少的情况下时候用Kruskal

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诺比诺比哒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值