《Algorithms》第4章:Paths in graphs 学习笔记
2012-07-05 17:35
417 查看
Chapter 4:paths in graphs
本章讨论寻找最短路径的算法。
1、The distance between two nodes is the length of the shortest path between them.
2、无权图中,用Breadth-first search寻找单源最短路径的伪码(适合有向和无向):
3、DFS和BFS的比较:
4、单源最短路径:Dijkstra算法。下图是一个具体例子:
5、Priority Queue 的实现:
unordered arry
Binary heap
d-ary heap
Binary heap是2-ary heap. 假设node[1..n], 则node[j]的parent是floor[(j-1)/d] , children是{ (j-1)d+2, .... , min{n,(j-1)d+d+1} }
比较:(本章没有详细说Fibonacci heap)
6、存在负边怎么计算最短路径:Bellman-Ford 算法
这篇文章详细介绍了此算法:http://www.cppblog.com/infinity/archive/2008/11/11/66621.html
7、最短路径算法总结:
8、第三第四章简单回忆:
DFS
BFS
连通分量
无向图:DFS
有向图:DFS,再对逆图DFS
最短路径:
单源最短路径
无负边:Dijkstra 算法
有负边:Bellman-Ford 算法
所有点最短路径:Floyd-Warshall 算法
最小生成树
Prim 算法
Kruskal 算法
拓扑排序:DFS
本章讨论寻找最短路径的算法。
1、The distance between two nodes is the length of the shortest path between them.
2、无权图中,用Breadth-first search寻找单源最短路径的伪码(适合有向和无向):
3、DFS和BFS的比较:
DFS | BFS | |
特性 | 纵深发展,直至无法前行才停止 | 以层(到源点的边数)为顺序横向扩展 |
实现方式 | 堆栈 | 队列 |
边的类型(无向图) | 树边、回边 | 树边、横跨边 |
边的类型(有向图) | 树边、回边、前向边、横跨边 | 树边、回边、横跨边 |
顶点顺序 | 两种(入栈顺序、出栈顺序) | 一种(入队顺序和出队顺序相同) |
典型应用 | 连通性测试、无环测试、有向图的强连通分量 | 连通性测试、无环测试、无权图的最短路径 |
复杂度 | 邻接矩阵:Θ(|V|^2),邻接表:Θ(|V|+|E|) | 同左边 |
5、Priority Queue 的实现:
unordered arry
Binary heap
d-ary heap
Binary heap是2-ary heap. 假设node[1..n], 则node[j]的parent是floor[(j-1)/d] , children是{ (j-1)d+2, .... , min{n,(j-1)d+d+1} }
比较:(本章没有详细说Fibonacci heap)
6、存在负边怎么计算最短路径:Bellman-Ford 算法
这篇文章详细介绍了此算法:http://www.cppblog.com/infinity/archive/2008/11/11/66621.html
7、最短路径算法总结:
算法 | 适用性 | 时间复杂度 |
BFS | 单源、权恒为1 | O(|V|+|E|) |
Dijkstra | 单源、权非负 | 使用二叉堆:O((|V|+|E|)*log|V|) |
Bellman-Ford | 单源 | O(|V|*|E|) |
DAG最短路径 | 单源、有向无环图 | O(|E|) |
Floyd-Warshall | 多源 | O(|V|^3) |
DFS
BFS
连通分量
无向图:DFS
有向图:DFS,再对逆图DFS
最短路径:
单源最短路径
无负边:Dijkstra 算法
有负边:Bellman-Ford 算法
所有点最短路径:Floyd-Warshall 算法
最小生成树
Prim 算法
Kruskal 算法
拓扑排序:DFS
相关文章推荐
- 《Algorithms》第4章:Paths in graphs 学习笔记
- Think in java学习笔记-第4章 初始化和清除
- Introduction to Algorithms 算法导论 第4章 递归式 学习笔记及习题解答
- 《Algorithms》第3章:Decompositions of graphs 学习笔记
- 《Algorithms》第3章:Decompositions of graphs 学习笔记
- 【NDN安全】Coordination Supports Security: A New Defence Mechanism Against Interest Flooding in NDN 学习笔记
- 41.笔记 MySQL学习——IN和NOT IN子查询
- 学习《Thinking in java》笔记二
- Thinking in UML 学习笔记(一)——建立对象模型
- MIT Introduction to Algorithms 学习笔记(六)
- 【NDN安全】Interest Flooding Attack and Countermeasures in Named Data Networking 学习笔记
- javascript学习笔记(4)--with和for(in)对象语句
- R-CNN学习笔记3:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition(SPP-net)
- 【1】.thinking in java 学习笔记
- 《Algorithms》第8章:NP完全问题 学习笔记
- ASP.NET MVC4 IN ACTION学习笔记-第六波[Ajax in ASP.NET MVC][3/3]
- 【R in action】学习笔记——第二章:数据结构
- [深度学习论文笔记][Image Classification] Identity Mappings in Deep Residual Networks
- ZigBee学习笔记_InitBoard()_1
- C# in Depth Third Edition 学习笔记-- 可空类型