数学

闭包

集合 A 上的关系 R 关于性质 P 的闭包(closure),指的是满足性质 P 且包含 R 的极小关系 S。也就是说,S 包含 R、满足性质 P,且是任何包含 R、满足性质 P 的关系的子集。

自反闭包

一个关系 R 的自反闭包,等于自身与相等关系的并。

对称闭包

一个关系 R 的对称闭包(symmetric closure)等于关系 R 与其逆的并。

显然,R = \{(a, b): (a, b) \in R\},其逆就是 R^{-1} = \{(a, b): (b, a) \in R\}。也就是说,R 的对称闭包就是 R \cup R^{-1} = \{(a, b): (a, b) \in R \lor (b, a) \in R\}。

传递闭包

关系与有向图

对于集合 A 上的二元关系 R 和 a, b \in A,若存在 c \in A,使得 (a, c) \in R 且 (c, b) \in R,则称 (a, b) \in R^2。同理可以继续定义 R^3, R^4, \dots, R^n。

二元关系 R 可以看作一个有向图 G = (A, R),则 (a, b) \in R^n 当且仅当 G 上 (a, b) 存在一条长度为 n 的路径(未必是简单路径)。这一点由数学归纳法,显然。

传递闭包

集合 A 上关系 R 的传递闭包(transitive closure)R^*,指的是对任意的 a, b, c \in A,如果 (a, b) \in R^*,(b, c) \in R^*,则一定有 (a, c) \in R^* 的包含 R 的最小集合。

传递闭包由以下公式给出:

R^* = \bigcup_{n=1}^{\infty} R^n.

若有向图的节点数为 n,节点 a, b 之间有一条长度为 l 的路径,且 l \ge n,则该路径必定重复经过某些节点,形成了一个环。此时必有一条相同的、长度小于 l 的路径代替该节点。对应到传递闭包上,并集只需计算到 n 即可:

R^* = \bigcup_{k = 2}^n R^k.

算法

朴素算法

关系 R 对应的 0-1 矩阵也用 R 表示,则相当于计算:

R^* = \prod_{k = 2}^n R^k.

规定 0-1 矩阵的乘法定义中,“乘”表示逻辑与,“加”表示逻辑或。i.e. 定义 C = AB 为

c_{ij} = (a_{i1} \land b_{1j}) \lor \cdots \lor(a_{in} \land b_{nj}) = \bigvee_{k=1}^n (a_{ik} \land b_{kj}).

Warshall 算法

见 传递闭包

BEYOND THE ARTICLE

读完了,有什么想法?

阅读已保存的问答示例,并循着引用回到原文。

查看公开问答示例
— 本文完 — 返回文章列表