最短路的理解
2015-12-12 13:48
260 查看
最短路算法的几个问题
Dijkstra算法不能有负权的原因
:Dijkstra算法是一种贪心算法。每次寻找距离源最短的点。然后在这个点上面进行松弛操作.如果有负权。则这种贪心在本质上就不成立,比如A->B 10 B->C -1 A->C 15 先是A->B最短,更新C后 A->C比A->B还短。
2.Bellman-Ford算法原理解释
对于环,有正环,0环,负环。
如果有最短路。则一定没有环。正环,0环好理解,对于负环。比如C在一个负环中。A为源点。 A->C的最短路会持续不断的减少,相当于走了很多次负环(自己YY的,不知对不对.)
所以对于n个节点。只需要 n-1次松弛操作即可。但是效率比较低下,有很多无用的比较。
所以出来了spfa算法。 这是在Bellman-Ford算法上面的优化。因为只有松弛操作成功后的点才有用。
3.Flyod算法的理解、
对于k的顺序的理解
k如果不放在第一位,那么就会提早确定最短路。 比如 A-B的最短路 可以由 A->C->D->B得来,但是k放在最后面的话。C->D的大小无法顾及到。
参考博客:
最短路
spfa
多说无益,需要练习
Dijkstra算法不能有负权的原因
:Dijkstra算法是一种贪心算法。每次寻找距离源最短的点。然后在这个点上面进行松弛操作.如果有负权。则这种贪心在本质上就不成立,比如A->B 10 B->C -1 A->C 15 先是A->B最短,更新C后 A->C比A->B还短。
2.Bellman-Ford算法原理解释
对于环,有正环,0环,负环。
如果有最短路。则一定没有环。正环,0环好理解,对于负环。比如C在一个负环中。A为源点。 A->C的最短路会持续不断的减少,相当于走了很多次负环(自己YY的,不知对不对.)
所以对于n个节点。只需要 n-1次松弛操作即可。但是效率比较低下,有很多无用的比较。
所以出来了spfa算法。 这是在Bellman-Ford算法上面的优化。因为只有松弛操作成功后的点才有用。
3.Flyod算法的理解、
对于k的顺序的理解
k如果不放在第一位,那么就会提早确定最短路。 比如 A-B的最短路 可以由 A->C->D->B得来,但是k放在最后面的话。C->D的大小无法顾及到。
参考博客:
最短路
spfa
多说无益,需要练习
相关文章推荐
- hive字符串函数
- Java中的逆变与协变
- mingw编译环境下,对Opencv TBB 多线程环境编译
- 机器学习&深度学习实践(Python版)----Multivariate Linear Regression(多元线性回归)
- 开始学习Struts2
- VC++程序调试debug dump
- Node.js的优点和缺点(转载)
- Linux内核线程
- 自动部署LNMP脚本
- 自动部署LNMP脚本
- 分布式文件系统元数据分布方案对比
- caffe windows学习:第一个测试程序
- 新年计划
- zzulioj--1813--good string(模拟)
- 一个5位数,判断它是不是回文数,另一种思路JAVA实现
- android Installation error: INSTALL_FAILED_CONFLICTING_PROVIDER解决方案
- USB驱动结构分析
- zzulioj--1813--good string(模拟)
- Drying(贪心)
- (终端)Git命令-->基本使用(新手)