算法导论图论部分总结

具体证明详见算法导论

图的表示

  • \(G = (V,E)\),其中 \(V\) 为点集,\(E\) 为边集

  • 邻接矩阵:顾名思义为矩阵,\(a_{i,j}\) 表示边 \((i,j)\) 的信息。优点是可以进行矩阵乘法,可以方便的判断 \((u,v) \in E\);缺点是空间复杂度为 \(O(V^2)\),遍历图的时间复杂度也为 \(O(V^2)\),不适用于稀疏图

  • 邻接表:顾名思义为链表,\(Adj_u\) 表示能从 \(u\) 出发只经过一条边到达的点 \(v\)。优点是空间复杂度为 \(O(V+E)\),稠密图和稀疏图都适用;缺点也是不能快速判断 \((u,v) \in E\)

BFS

原理:对 \(u\) 能到达的点进行系统性探索,相当于一层层搜索。用队列实现

性质:

  • BFS 找到的路径是从起点开始的最短路径

  • BFS 过程中队列里的点的 \(dis\) 值单调递增,且只有两种 \(dis\)

DFS

原理:每次搜索尽量深入,深入不了再回到上一层决策。用栈实现

性质:
以下令把每个点的发现时间为 \(d\),每个点的完成时间为 \(f\)

  • dfs 后,在序列 \(A\) 中,,令 \(A_d = (\)\(A_f= )\), 则 \(A\) 为合法括号序列
  • dfs 后,可建出 dfs 生成树,在无向图中有四种边:树边,前向边,后向边,横叉边。在有向图中有两种边:树边,后向边。可以通过 \(u.d,u.f,v.d,v.f\) 的关系判断边的类型

拓扑排序

前提:有向无环图

方法 1:dfs 一次,在每个点完成搜索后放到栈里

posted @ 2025-10-02 10:45  huangyuze  阅读(11)  评论(0)    收藏  举报