《Algorithms》第4章:Paths in graphs 学习笔记

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的比较:
 DFSBFS
特性纵深发展,直至无法前行才停止以层(到源点的边数)为顺序横向扩展
实现方式堆栈队列
边的类型(无向图)树边、回边树边、横跨边
边的类型(有向图)树边、回边、前向边、横跨边树边、回边、横跨边
顶点顺序两种(入栈顺序、出栈顺序)一种(入队顺序和出队顺序相同)
典型应用连通性测试、无环测试、有向图的强连通分量连通性测试、无环测试、无权图的最短路径
复杂度邻接矩阵:Θ(|V|^2),邻接表:Θ(|V|+|E|)同左边



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、最短路径算法总结:
算法适用性时间复杂度
BFS单源、权恒为1O(|V|+|E|)
Dijkstra单源、权非负使用二叉堆:O((|V|+|E|)*log|V|)
Bellman-Ford单源O(|V|*|E|)
DAG最短路径单源、有向无环图O(|E|)
Floyd-Warshall多源O(|V|^3)



8、第三第四章简单回忆:
  • DFS
  • BFS
  • 连通分量
    • 无向图:DFS
    • 有向图:DFS,再对逆图DFS
  • 最短路径:
    • 单源最短路径
      • 无负边:Dijkstra 算法
      • 有负边:Bellman-Ford 算法
    • 所有点最短路径:Floyd-Warshall 算法
  • 最小生成树
    • Prim 算法
    • Kruskal 算法
  • 拓扑排序:DFS










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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值