Lec 14有向图与 DAG
Lec 14 有向图与 DAG
资料依据:课程视频与 transcript · Lecture notes
TL;DR
- 有向图区分入边与出边,“可达”不再对称;强连通分量将互相可达的顶点缩约后,得到的凝聚图一定是 DAG。
- DAG 不含有向环,因而必有入度为 0 的源点和出度为 0 的汇点,并且至少存在一个拓扑序。
- 拓扑序把所有有向边的起点放在终点之前;它可用于表示依赖、调度任务和将偏序线性扩展。
1. 有向图基础
定义: 有向图(Digraph) 中, 是有序对的集合。边 写作 ,表示从 到 的有向边。
与无向图的区别:
- 允许自环 。
- 允许反向平行边: 与 是不同的两条边。
- 仍然不允许重边(不能有两条 )。
应用举例: 状态机(状态 = 顶点,转移 = 有向边)、Twitter 关注图、道路网络(双向路用两条有向边表示)、网页超链接图(PageRank 的基础)。
度数
- 入度 :指向 的边数。
- 出度 :从 出发的边数。
有向握手引理:
游走与路径
有向游走:顶点序列 ,满足 (必须沿边的方向行走)。迹、路径、闭游走、回路的定义与无向图完全类似。
定理: 若存在从 到 的有向游走,则存在从 到 的有向路径。
在有向图中,圈可以有长度 1(自环)或长度 2(反向平行边对),而无向图中圈的长度至少为 3。
2. 有向连通性
有向图中,连通性不对称。
定义: 若存在从 到 的有向游走,则称 能到达 ( 从 可达)。
定义: 若 能到达 且 能到达 ,则称 与 强连通。
定义: 若每对顶点都强连通,则称图 为强连通图。
有向欧拉回路
定理: 有向图存在欧拉回路,当且仅当图是强连通的,且每个顶点的入度等于出度。
3. 强连通分量(SCC)
定义: 顶点 的强连通分量(SCC) 是所有与 强连通的顶点导出的子图。
SCC 对顶点构成划分。但与无向连通分量不同,SCC 之间可以存在有向边。
凝聚图(Condensation Graph)
定义: 图 的凝聚图 ,其中:
- (每个 SCC 压缩为一个节点)
- (SCC 之间若有有向边则建立对应边,删去自环)
关键性质: 每个凝聚图都是 DAG。
4. DAG(有向无环图)
定义: 有向无环图(DAG) 是没有有向圈的有向图。
类比关系:无环无向图 → 森林;无环有向图 → DAG。
应用: 任务依赖调度、并发控制、数据处理流水线、构建系统等。
Hasse 图
- 若 是两点之间唯一的有向路径,则称为覆盖边。
- 否则称为冗余边(存在绕过该边的其他路径)。
- 只保留覆盖边得到的 DAG 称为 Hasse 图,它用更少的边编码了相同的偏序关系。
5. 拓扑排序
定义: 入度为 0 的顶点称为源点(Source);出度为 0 的顶点称为汇点(Sink)。在 DAG 中,源点即极小元,汇点即极大元。
定义: DAG 的拓扑序(拓扑排序) 是所有顶点的一个线性排列,使得每个顶点都出现在所有从它可达的顶点之前。
定理: 每个有限 DAG 都有拓扑序。
引理: 每个有限 DAG 至少有一个源点。
证明: 取最长有向路径,其起点必须是源点;否则可延长路径,或存在圈——均矛盾。
对 作归纳的证明:
- 基础情形 :空序列即为拓扑序。✓
- 归纳步骤: 设 是 个顶点的 DAG,取其源点 。令 , 是 个顶点的 DAG,由归纳假设有拓扑序。在该序列最前面加上 ,即得 的拓扑序。✓
6. 并行任务调度
目标: 给定带依赖关系的任务 DAG,使用尽可能多的并行工作者,最小化完成所有任务所需的阶段数。
定义:
- 两个顶点 可比,若其中一个能到达另一个。
- 链(Chain) 是一个两两可比的顶点集合——链中的任务必须串行执行。
- 反链(Antichain) 是一个两两不可比的顶点集合——反链中的任务可以同时执行。
- 关键路径(Critical Path) 是最大的链。
基本事实:
最短并行调度的阶段数 最长链的长度。
最短并行调度的阶段数 最长链的长度。
证明思路: 定义 = 以 为终点的最长路径长度。令 。
- 若 能到达 ,则 (可将到达 的路径接上 的路径)。
- 故每个 是反链(其中所有顶点互不可达)。
- 每个 的所有前驱深度严格更小,故在第 阶段执行所有 中的任务,所有依赖已满足。
- 总共恰好需要 个阶段( 为关键路径长度)。
穿衣例子(Getting Dressed):
V1 = {左袜, 右袜, 裤子, 衬衫}
V2 = {左鞋, 右鞋, 腰带, 外套}
V3 = {围巾, 帽子}
V4 = {大衣}
关键路径为 {衬衫 → 外套 → 围巾 → 大衣},共 4 个阶段。
注:最大反链的大小给出所需工作者数量的上界,但实际可能需要更少。
7. Dilworth 定理(了解,不考)
定理: 对任意 , 个顶点的 DAG 必然存在大小 的链,或大小 的反链。
推论(取 ):每个 顶点 DAG 必然存在大小 的链或反链。
证明: 若最大链大小 且最大反链大小 ,则按深度划分顶点得到 个反链,每个大小 ,总顶点数 ——与共有 个顶点矛盾。
我的理解
我的理解
强连通分量是处理一般有向图的关键压缩:分量内的顶点在可达性上无法区分,分量之间则恢复为 DAG,从而可以再使用拓扑顺序和动态规划。