传递闭包

计算有向图中每对顶点之间的可达性关系,是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的版本等价

参见