Dijkstra的加法与乘法的最短长距离

目录

回顾Dijkstra算法正确性本质

1,为什么最短路只能在正权图上使用?

2,对于最长路,能否使用dijkstra?

3,那么SPFA算法是否可以处理最长路问题?

总结

加法最小值

加法最大值

乘法最小值

乘法最大值


回顾Dijkstra算法正确性本质

回顾Dijkstra算法的思想,他是基于贪心的

对于寻找单元最短路,每次找到全图没有加入到dist数组且最小的那个点来更新其他的点

1,为什么最短路只能在正权图上使用?

因为dijkstra算法的贪心确认了每个点只会被更新一次,如果是最短路的话正权图dist只会越来越大,所以能保证这个性质,

但是对于负权图,dist不一定单调增大的,因此这个点不能被确定已经是最终的dist最小的情况

总结:最短路使用dijkstra算法要边权全部为正才能保证每个点只被更新一次

2,对于最长路,能否使用dijkstra?

只要了解dijstra算法的贪心原理,就能发现对于最长路也是可以运用的。

对于最短路,我们要保证边是正的递增,才能保证每次找到的最小的dist再也不会被更新掉

那么对于最长路,我们只要保证dist是越来越小的,才能保证我们每次找到的最大的距离点再也不会被更新掉

那么边权加肯定是不行的,我们可以考虑边权的乘积,且边权在0到1区间里,

因为权值小于1所以每次更新dist会更小,也就确保了,我们每次找到最大的距离点再也不会被更新掉。

3,那么SPFA算法是否可以处理最长路问题?

当然是可以的,因为spfa算法的正确性来源于松弛操作,也就是那个三角不等式迭代更新所有的边,这个操作不管正负乘,都可以实现,所以最长路也是可以的。

总结

加法最小值

1, 无负权边: dijkstra理由

2, 有负边权:spfa

加法最大值

spfa

乘法最小值

1, 边权 >= 1, dijkstra 理由:算法的前提是dist数组里的都是已经确定最小值的,若存在 < 1的话会破坏这个前提。

2. >0 spfa

乘法最大值

1 0 ~ 1 dijkstra

2 > 0  spfa

如果有误,感谢大佬指出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值