单源最短路径的基本算法 -- 算法导论笔记
来源:互联网 发布:c语言函数的声明 编辑:程序博客网 时间:2024/06/06 03:31
通用的Bellman-Ford:
特点:能处理存在负权边的情况,并能判断是否存在负权回路。可以用在差分约束系统问题的求解,有解情况下最短路径是一组可行解。效率低,O(VE)。
过程:做 顶点数(V) - 1 次对所有边的松弛操作,也可以加一个flag检查到没有需要松弛的时候便结束,快一点。再检查一遍是否有边还能做松弛操作(把松弛操作比较部分反过来做判断条件),若能则说明有负权回路。
注:负权回路很多时候能代表存在一些不合理的性质(让人可以钻空子的bug),比如交易系统可以交易一圈(即最终交易回初始物品)之后得到多的钱poj1860,不合理的虫洞旅行见到旅行前的自己(在科幻片中类似场景层出不穷)poj3259,这种情况就可以用该算法来检测。也就是说,该算法不仅可以用来求存在负权边的最短路,还可以用来检测是否存在负权回路。
dag(有向无回图)(directed acyclic graphs):
特点:对dag图能做,能处理负权边,效率高,O(V+E)。可用于 求PERT图(program evaluation and review technique chart,程序评价和审查技术图)中的关键路径(关键路径指通过dag的一条最长路径),由于PERT图反应工作的依赖关系,必然是dag。
过程:拓扑排序,按序对边做一次松弛操作。
Dijkstra:
特点:不能处理负权边,效率较高(效率取决于优先队列的实现方式,二叉堆实现时为O((V+E)lgV))。
过程:类似BFS,不过把普通的队列换成了优先队列。
DIJIKSTRA(G,w,s)//initialinitialize_single_source(G,s)//bfsS <- empty //work as color[]Q <- V[G]while Q != empty do u <- extract_min(Q) S <- S + {u} for each v from Adj[u] do RELAX(u,v,w)
- 单源最短路径的基本算法 -- 算法导论笔记
- 【算法导论笔记】单源最短路径
- 每对顶点间的最短路径基本算法 --- 算法导论笔记
- [算法导论] 单源最短路径 - Dijkstra 学习笔记
- 算法导论笔记:24单源最短路径
- 算法导论 单源最短路径
- 《算法导论》学习笔记-图的基本算法
- 【算法导论笔记】基本图算法
- 算法导论笔记:22基本图算法
- 《算法导论》笔记(13) 单源最短路径,所有结点对的最短路径
- 算法导论 ch24 单源最短路径
- 算法导论之单源最短路径
- 算法导论 单源最短路径 Dijkstra
- 算法导论-单源最短路径-Dijkstra算法的实现
- 《算法导论》笔记 第24章 24.1 单源最短路径
- 《算法导论》笔记(16) 单源最短路径 部分习题
- 【算法导论】单源最短路径之Dijkstra算法
- 算法导论 ch22 图的基本算法
- Android消息处理机制
- JAVA内存管理1
- lenovo g580使用u盘安装64位centos
- 1000.A-B
- Struts2 ognl中的#、%和$符号用法说明(转)
- 单源最短路径的基本算法 -- 算法导论笔记
- 用SDK写基于对话框的程序(不用向导)
- 大数相加,两个大数。
- 2013腾讯马拉松编程初赛3月21日1002
- zTree 一个依靠 jQuery 实现的多功能 “树插件”
- 20130321 网易实习招募 笔试回忆
- IT人士成功的6大步骤
- Unity3D模型制作规范
- Uva Oj 10881 - Piotr's Ants