传递闭包
计算有向图中每对顶点之间的可达性关系,是Floyd-Warshall算法在布尔半环上的特例
定义
形式化定义
给定有向图 , 的传递闭包 满足: 当且仅当从 到 存在一条路径(路径长度至少为0,即每个顶点到自身可达)。
用布尔矩阵 表示,其中 当且仅当从 到 存在一条所有中间顶点编号不超过 的路径。
递推关系:
核心性质
| 性质 | 描述 |
|---|---|
| 时间复杂度 | |
| 空间复杂度 | (就地更新) |
| 与FW的关系 | Floyd-Warshall在布尔半环上的特例(min→OR,+→AND) |
| BFS/DFS方法 | 对每个顶点运行BFS/DFS,,适合稀疏图 |
| 自反性 | 对角线元素 (每个顶点到自身可达) |
关系网络
graph LR A["传递闭包"] --> B["Floyd-Warshall算法"] A --> C["有向图可达性"] A --> D["布尔矩阵乘法"] A --> E["强连通分量"] B --> A
章节扩展
第23章:所有结点对的最短路径
传递闭包是CLRS第23.2节中Floyd-Warshall算法的自然扩展,将数值计算替换为布尔运算。
算法伪代码:
TRANSITIVE-CLOSURE(G)
1 n = |G.V|
2 for i = 1 to n
3 for j = 1 to n
4 if i == j or (i, j) ∈ G.E
5 t^(0)_{ij} = 1
6 else
7 t^(0)_{ij} = 0
8 for k = 1 to n
9 for i = 1 to n
10 for j = 1 to n
11 t^(k)_{ij} = t^(k-1)_{ij} OR (t^(k-1)_{ik} AND t^(k-1)_{kj})
12 return T^(n)
与Floyd-Warshall的对应关系:
| Floyd-Warshall | 传递闭包 |
|---|---|
| (OR) | |
| (AND) | |
| (FALSE) | |
| 权重矩阵 | 邻接矩阵 |
稀疏图上的高效方法: 对每个顶点 运行一次BFS或DFS,找出从 可达的所有顶点。总时间 ,当 时为 ,对稀疏图优于 。
补充
补充说明
- 传递闭包在社交网络分析中回答”A能否通过朋友链到达B?“这类可达性问题
- 数据库中SQL的递归公共表表达式(Recursive CTE)本质上计算传递闭包
- 编译器的数据流分析中,传递闭包用于计算变量活跃范围和可达定义
- 操作系统中资源分配图的传递闭包可用于死锁检测
- 传递闭包也可用Warshall算法(1962)直接计算,与Floyd的版本等价