算法学习day5

参考资料《我的第一本算法书》

两种求解最短路径的算法:
🍗贝尔曼-福特算法;
🧀狄克斯特拉算法。

(1)贝尔曼福特算法
🍏首先设置各个顶点是权重:起点是0,其他顶点无穷大。
🍎更新顶点的值。用上一个顶点的值加上边的值,如果计算结果小于顶点的值,就更新,否则不更新。
🍐没有特定的顺序进行更新,但是每个顶点和每条边都要遍历到。
🍊若图的顶点数为n,变数为m,则整体的复杂度为O(mn)。

(2)狄克斯特拉算法
🍏首先设置各个顶点的初始权重:起点为0,其他顶点为无穷大。
🍎寻找可以从目前所在顶点直达且尚未被搜索过的顶点,使其成为候补顶点。
🍐更新候补顶点的值,方法与贝尔曼福特算法中的相同。
🍊从候补顶点中选出权重最小的顶点。
🍋之后若遇到有顶点值一样的时候,之前未考虑进来的顶点也要考虑进来。
🍉若图的顶点设为n,变数是m,如果事先不进行任何处理,该算法的时间复杂度为O(n^2),如果对数据结构进行优化,那么时间复杂度为O(m+nlogn)。

(3)贝尔曼福特算法和狄克斯特拉算法的比较
🍏贝尔曼福特算法可用于权重为负的时候,而狄克斯特拉算法不行。
🍎总体上看,狄克斯特拉算法在求最短路径上会更为高效。因为狄克斯特拉算法多了一步选择顶点的操作,即并不是所有的顶点都会经过。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值