Skip to content

Lecture 14:有向图与 DAG

1. 有向图基础

定义: 有向图(Digraph) G=(V,E) 中,EV×V 是有序对的集合。边 (u,v) 写作 uv,表示从 uv有向边

与无向图的区别:

  • 允许自环 (v,v)
  • 允许反向平行边(u,v)(v,u) 是不同的两条边。
  • 仍然不允许重边(不能有两条 uv)。

应用举例: 状态机(状态 = 顶点,转移 = 有向边)、Twitter 关注图、道路网络(双向路用两条有向边表示)、网页超链接图(PageRank 的基础)。

度数

  • 入度 deg(v):指向 v 的边数。
  • 出度 deg+(v):从 v 出发的边数。

有向握手引理:

vVdeg(v)=|E|=vVdeg+(v)

游走与路径

有向游走:顶点序列 v0,,vk,满足 (vi,vi+1)E(必须沿边的方向行走)。迹、路径、闭游走、回路的定义与无向图完全类似。

定理: 若存在从 uv 的有向游走,则存在从 uv 的有向路径。

在有向图中,圈可以有长度 1(自环)或长度 2(反向平行边对),而无向图中圈的长度至少为 3。


2. 有向连通性

有向图中,连通性不对称

定义: 若存在从 uv 的有向游走,则称 u 能到达 vvu 可达)。

定义:u 能到达 vv 能到达 u,则称 uv 强连通

定义: 若每对顶点都强连通,则称图 G强连通图

有向欧拉回路

定理: 有向图存在欧拉回路,当且仅当图是强连通的,且每个顶点的入度等于出度。


3. 强连通分量(SCC)

定义: 顶点 v强连通分量(SCC) [v] 是所有与 v 强连通的顶点导出的子图。

SCC 对顶点构成划分。但与无向连通分量不同,SCC 之间可以存在有向边

凝聚图(Condensation Graph)

定义:G=(V,E)凝聚图 H=(C,E),其中:

  • C={[v]:vV}(每个 SCC 压缩为一个节点)
  • E={([u],[v]):[u][v], (u,v)E}(SCC 之间若有有向边则建立对应边,删去自环)

关键性质: 每个凝聚图都是 DAG。


4. DAG(有向无环图)

定义: 有向无环图(DAG) 是没有有向圈的有向图。

类比关系:无环无向图 → 森林;无环有向图 → DAG。

应用: 任务依赖调度、并发控制、数据处理流水线、构建系统等。

Hasse 图

  • uv 是两点之间唯一的有向路径,则称为覆盖边
  • 否则称为冗余边(存在绕过该边的其他路径)。
  • 只保留覆盖边得到的 DAG 称为 Hasse 图,它用更少的边编码了相同的偏序关系。

5. 拓扑排序

定义: 入度为 0 的顶点称为源点(Source);出度为 0 的顶点称为汇点(Sink)。在 DAG 中,源点即极小元,汇点即极大元。

定义: DAG 的拓扑序(拓扑排序) 是所有顶点的一个线性排列,使得每个顶点都出现在所有从它可达的顶点之前。

定理: 每个有限 DAG 都有拓扑序。

引理: 每个有限 DAG 至少有一个源点。

证明: 取最长有向路径,其起点必须是源点;否则可延长路径,或存在圈——均矛盾。

n 作归纳的证明:

  • 基础情形 n=0:空序列即为拓扑序。✓
  • 归纳步骤:Gn 个顶点的 DAG,取其源点 v。令 H=G{v}Hn1 个顶点的 DAG,由归纳假设有拓扑序。在该序列最前面加上 v,即得 G 的拓扑序。✓

6. 并行任务调度

目标: 给定带依赖关系的任务 DAG,使用尽可能多的并行工作者,最小化完成所有任务所需的阶段数

定义:

  • 两个顶点 u,v 可比,若其中一个能到达另一个。
  • 链(Chain) 是一个两两可比的顶点集合——链中的任务必须串行执行。
  • 反链(Antichain) 是一个两两不可比的顶点集合——反链中的任务可以同时执行。
  • 关键路径(Critical Path) 是最大的链。

基本事实:

最短并行调度的阶段数 最长链的长度。

最短并行调度的阶段数 = 最长链的长度。

证明思路: 定义 depth(v) = 以 v 为终点的最长路径长度。令 Vi={v:depth(v)=i}

  • u 能到达 vu,则 depth(u)<depth(v)(可将到达 u 的路径接上 uv 的路径)。
  • 故每个 Vi 是反链(其中所有顶点互不可达)。
  • 每个 v 的所有前驱深度严格更小,故在第 i 阶段执行所有 Vi 中的任务,所有依赖已满足。
  • 总共恰好需要 c 个阶段(c 为关键路径长度)。

穿衣例子(Getting Dressed):

V1 = {左袜, 右袜, 裤子, 衬衫}
V2 = {左鞋, 右鞋, 腰带, 外套}
V3 = {围巾, 帽子}
V4 = {大衣}

关键路径为 {衬衫 → 外套 → 围巾 → 大衣},共 4 个阶段。

注:最大反链的大小给出所需工作者数量的上界,但实际可能需要更少。


7. Dilworth 定理(了解,不考)

定理: 对任意 t>0n 个顶点的 DAG 必然存在大小 >t 的链,或大小 n/t 的反链。

推论(取 t=n):每个 n 顶点 DAG 必然存在大小 n 的链或反链。

证明: 若最大链大小 ct 且最大反链大小 <n/t,则按深度划分顶点得到 c 个反链,每个大小 <,总顶点数 <c<t(n/t)=n——与共有 n 个顶点矛盾。