Lengauer-Tarjan算法的相关证明

Lengauer-Tarjan算法的相关证明

0. 约定

为简单起见,下文中的路径均指简单路径(事实上非简单路径不会对结论造成影响)。

\(V\)代表图的点集,\(E\)代表图的边集,\(T\)代表图的DFS树。
\(a \to b\)代表从点\(a\)直接经过一条边到达点\(b\)(即\((a, b) \in T\)),
\(a \leadsto b\)代表从点\(a\)经过某条路径到达点\(b\)
\(a \dot \to b\)代表从点\(a\)经过\(T\)的树边到达点\(b\)(在\(T\)\(a\)\(b\)的祖先),
\(a \overset{+} \to b\)代表\(a \dot \to b\)\(a \ne b\)
这4种符号也同时表示路径。

1. 基本介绍 支配树(Dominator Tree)

\(G = (V, E, r)\)为点集为\(V\),边集为\(E\),起点为\(r\)的流程图。如果一个从\(r\)\(w\)的所有路径都经过\(v\),那么称\(v\)支配\(w\)\(v\)\(w\)的支配点。如果\(v\)\(w\)的支配点,且\(w\)的其他所有支配点均支配\(v\),那么称\(v\)\(w\)直接支配节点(immediate dominator),记作\(idom(w) = v\)

定理1. 图\(G\)中除点\(r\)外其他所有点都有唯一的直接支配节点。点集\(V\)和边集\(\{ (idom(w), w) | w \in V - \{r\} \}\)组成了一棵以点\(r\)为根的有向树,称为图\(G\)支配树(Dominator Tree)。点\(v\)支配点\(w\)当且仅当在支配树上点\(v\)是点\(w\)的祖先。

2. 支配树相关性质

首先,我们从起点\(r\)对图\(G\)进行DFS,得到了一棵DFS树\(T\)。原图\(G\)中的边\((u, v)\)就分为了树边\(( (u, v) \in T)\)和非树边\(( (u, v) \notin T)\)。非树边还可以分为前向边(\(u\)\(v\)的祖先),后向边(\(u\)\(v\)的后代),横叉边(\(u, v\)非祖先后代关系)。

我们通过DFS序比较两个点的大小关系。那么前向边\((u, v)\)满足\(u < v\),后向边\((u, v)\)满足\(u > v\),横叉边\((u, v)\)满足\(u > v\)

接下来给出一些有关支配树算法的重要引理。

引理1.(路径引理) 如果图\(G\)的两个点\(v, w\)满足\(v \le w\),那么点\(v\)到点\(w\)任意路径一定经过点\(v\)和点\(w\)的某个在树\(T\)上的公共祖先(至少一个)

证明: 如果\(v\)\(w\)的祖先,结论显然成立(必然经过点\(v\))。否则\(v, w\)非祖先后代关系,令\(p\)\(LCA(u, v)\),显然\(p \ne v \ and \ p \ne w\)。删掉从起点\(r\)\(p\)的路径上的所有点(这些点是\(v, w\)的公共祖先),那么\(v\)\(w\)在以\(p\)为根两棵子树内,并且因为公共祖先被删去,无法通过后向边到达子树外面,前向边也无法跨越子树,而横叉边只能从大到小(\(v\)所在子树内的点均大于\(w\)所在子树内的点),所以从\(v\)出发不能离开这颗子树到达w。所以如果本来\(v\)能够到达\(w\),就说明这些路径必须经过\(v, w\)的公共祖先。

一个小推论: 如果图\(G\)的两个点\(v, w\)满足\(v \lt w\),那么点\(v\)到点\(w\)任意路径一定经过点\(w\)的某个在树\(T\)上的真祖先(至少一个)。

对于图\(G\)中的点\(w\)\(w \ne r\)),定义它的半支配点(semi-dominator)\(sdom(w) = \min \{ v | \exists (v_0, v_1, \cdots, v_{k - 1}, v_k), v_0 = v, v_k = w, \forall 1 \leq i \leq k - 1, v_i \gt w \} \tag{1}\)

半支配点有很多性质,使得它们的计算成为支配点计算中的一个方便的中间步骤。对于任意点\(w\)\(w \neq r\)),\(sdom(w)\)\(w\)在树\(T\)上的真祖先,\(idom(w)\)\(sdom(w)\)在树\(T\)上的祖先。如果把图\(G\)中的树边边集替换为边集\(\{ (sdom(w), w) | w \in V \ and \ w \neq r \}\),在新图\(G'\)中的所有点的支配点并不会改变。因此如果我们知道了DFS树和半支配点,我们可以计算出支配点。

以下将证明半支配点的这些性质。接下来的引理给出了DFS树,半支配点和支配点之间一般关系。

引理2. 对于任意点\(w\)\(w \ne r\)),有\(idom(w) \overset{+}{\to} w\)

证明: 显然,如果不是这样的话就可以直接通过树边不经过\(idom(w)\)就到达\(w\)了,与\(idom\)定义矛盾。

引理3. 对于任意点\(w\)\(w \ne r\)),有\(sdom(w) \overset{+}{\to} w\)

证明: 对于\(w\)在树\(T\)上的父亲\(fa_w\)\(fa_w \to w\)这条路径只有两个点,所以满足\(sdom\)定义中的条件,于是它是\(sdom(w)\)的一个候选,所以\(sdom(w) \le fa_w\),就有\(sdom(w) \lt w\)。根据引理1(路径引理)可以证明\(sdom(w)\)不可能在另一棵子树,因为如果是那样的话就至少会经过\(w\)的一个真祖先,\(w\)的真祖先小于\(w\),与\(sdom(w)\)的定义矛盾,于是\(sdom(w)\)就是\(w\)的真祖先。

引理4. 对于任意点\(w\)\(w \ne r\)),有\(idom(w) \dot \to sdom(w)\)

证明: 如果不是这样的话,按照\(sdom\)的定义,就会有一条路径是\(r \dot \to sdom(w) \leadsto w\)不经过\(idom(w)\)了,与\(idom\)的定义矛盾。

引理5. 对于满足\(v \dot \to w\)的点\(v, w\),有\(v \dot \to idom(w)\)\(idom(w) \dot \to idom(v)\)

证明: 如果\(v = w\)显然成立。否则,如果不是这样的话,就是\(idom(v) \overset{+}{\to} idom(w) \overset{+}{\to} v \overset{+}{\to} w\),那么存在路径\(r \dot \to idom(v) \leadsto v \overset{+}{\to}w\)不经过\(idom(w)\)到达了\(w\)(因为\(idom(w)\)\(idom(v)\)的真后代,一定不支配\(v\),所以存在绕过\(idom(w)\)到达\(v\)的路径),与\(idom\)的定义矛盾。

通过引理1-5,我们获得了能提供从半支配点计算支配点的方法的两个结论。

定理2. 对于任意点\(w\)\(w \ne r\)),如果所有满足\(sdom(w) \overset{+}{\to} u \dot \to w\)\(u\)也满足\(sdom(u) \ge sdom(w)\),即\(sdom(w) \dot \to sdom(u) \overset{+}{\to} u \dot \to w\),那么\(idom(w) = sdom(w)\)

证明: 由引理4知道\(idom(w) \dot \to sdom(w)\),所以只需要证明\(sdom(w)\)支配\(w\)就可以证明此定理。对于\(r\)\(w\)的任意一条路径\(p\),令\(x\)为路径\(p\)上最后一个满足\(x \lt sdom(w)\)的点。如果\(x\)不存在,那么\(sdom(w) = r\)支配\(w\),得证。否则令\(y\)为路径\(p\)\(x\)之后的满足\(sdom(w) \dot \to y \dot \to w\)的最小的点。令\(q = (x = v_0, v_l, v_2, \dots , v_k = y)\)为路径\(p\)\(x\)\(y\)的部分。我们可以断言\(v_i \gt y, \forall 1 \le i \le k - 1\)。假设它不成立,即\(\exists v_i \lt y, 1 \le i \le k - 1\)。通过引理1可得存在\(v_j(i \le j \le k - 1)\)\(y\)的真祖先。由\(x\)的定义可得\(v_j \ge sdom(w)\),所以\(sdom(w) \dot \to v_j \overset{+}{\to} y \dot \to w\),这与\(y\)的定义矛盾,所以此断言得证。
此断言使得路径\(q\)也是满足半支配点定义中的路径,并且由于\(x\)的定义,所以\(sdom(y) \le x \lt sdom(w)\)。因为所有满足\(sdom(w) \overset{+}{\to} u \dot \to w\)\(u\)也满足\(sdom(u) \ge sdom(w)\),而\(sdom(w) \dot \to y \dot \to w\),所以\(y = sdom(w)\),由此可得\(r\)\(w\)的任意一条路径都经过\(sdom(w)\)\(sdom(w)\)支配\(w\),此定理得证。

定理3. 对于任意点\(w\)\(w \ne r\)),令\(u\)为所有满足\(sdom(w) \overset{+}{\to} u \dot \to w\)\(u\)\(sdom(u)\)最小的一个,且\(sdom(u) \le sdom(w)\) ,即\(sdom(u) \dot \to sdom(w) \overset{+}{\to} u \dot \to w\),那么\(idom(w) = idom(u)\)

证明: 令\(z\)为满足\(sdom(w) \to z \dot \to w\)的点,有\(sdom(u) \le sdom(z) \le sdom(w)\)
由引理5可得\(u \dot \to idom(w)\)\(idom(w) \dot \to idom(u)成立\)。由引理4和命题条件可得\(idom(w) \dot \to sdom(w) \overset{+}{\to} u\),所以前者不成立,那么后者一定成立。为了证明\(idom(w) = idom(u)\),只需要证明\(idom(u)\)支配\(w\)
对于\(r\)\(w\)的任意一条路径\(p\),令\(x\)为路径\(p\)上最后一个满足\(x \lt idom(u)\)的点。如果\(x\)不存在,那么\(idom(u) = r\)支配\(w\),得证。否则令\(y\)为路径\(p\)\(x\)之后的满足\(idom(u) \dot \to y \dot \to w\)的最小的点。令\(q = (x = v_0, v_l, v_2, \dots , v_k = y)\)为路径\(p\)\(x\)\(y\)的部分。类似定理2中这部分的证明,\(x\)\(y\)的定义说明\(v_i \gt y(1 \le i \le k - 1)\),因此\(sdom(y) \le x\)。由于由引理4得到的\(idom(u) \dot \to sdom(u)\),有\(sdom(y) \le x \lt idom(u) \le sdom(u)\)
由于\(u\)是树\(T\)上从\(z\)\(w\)的路径上的点中半支配点最小的点,所以\(y\)一定不是\(sdom(w)\)的真后代。此外,\(y\)一定不是\(idom(u)\)的真后代和\(u\)的祖先,否则就存在一条由\(r \dot \to sdom(y)\)\(sdom(y) = v_0, v_1, \dots , v_k = y(v_i \lt y, \forall 1 \le i \le k - 1)\)\(y \dot \to u\)组成的路径没有经过\(idom(u)\),这与\(idom\)的定义矛盾。
由于\(idom(u) \dot \to y \dot \to w\),所以只有可能\(y = idom(u)\)。由此可得\(r\)\(w\)的任意一条路径都经过\(idom(u)\)\(idom(u)\)支配\(w\),此定理得证。

推论1. 对于任意点\(w\)\(w \neq r\)),令点\(u\)为所有满足\(sdom(w) \overset{+}{\to} u \dot \to w\)的点\(u\)\(sdom(u)\)最小的一个,有
\(idom(w) = \left \{ \begin{aligned} & sdom(w) & (sdom(u) = sdom(w)) & \\ & idom(u) & (sdom(u) \lt sdom(w)) & \end{aligned} \right. \tag{2}\)

证明: 通过定理2和定理3可以直接得到。
因为\(w\)也是\(u\)的候选,所有一定有\(sdom(u) \le sdom(w)\)

接下来的定理提供了一种计算半支配点的方法。

定理4. 对于任意点\(w\)\(w \ne r\)),有\(sdom(w) = min(\{v | (v, w) \in E , v \lt w \} \cup \{sdom(u) | u \gt w , \exists (v, w) \in E , u \dot \to v\} ) \tag{3}\)

证明: 令\(x\)\((3)\)右边的值。我们先证明\(sdom(w) \le x\)。假设第一种情况:\(x\)是满足\(\exists (x, w) \in E, x \lt w\)。由\((1)\)所以\(sdom(w) \le x\)。另一种情况:\(x = sdom(u)\)\(u\)是满足\(u \gt w \ and \ \exists (v, w) \in E \ and \ u \dot \to v\)的点。由\((1)\)存在一条路径\(x = v_0, v_1, \dots , v_j = u\)满足\(v_i \gt u \gt w, \forall 1 \le i \le j - 1\)。树\(T\)上的路径\(u = v_j \to v_{j + 1} \to \dots \to v_{k - 1} = v\)满足\(v_i \ge u \gt w, \forall j \le i \le k - 1\)。因此路径\(x = v_0, v_1, \dots , v_{k - 1} = v, v_k = w\)满足\(v_i \gt w, \forall 1 \le i \le k - 1\)。由\((1)\)所以\(sdom(w) \le x\)
接下来证明\(sdom(w) \ge x\)\(sdom(w) = v_0, v_1, \dots , v_k = w\)为一条满足\(v_i \gt w, \forall 1 \le i \le k - 1\)的路径。当\(k = 1\)时,\((sdom(w), w) \in E\),由引理3可得\(sdom(w) \lt w\)。因此\(sdom(w) \ge x\)。另一种情况当\(k \gt 1\)时,令\(j\)为最小的满足\(1 \le j \le k - 1 \ and \ v_j \dot \to v_{k - 1}\)。这样的\(j\)存在因为\(k - 1\)\(j\)的候选。
我们断言\(v_i \gt v_j, \forall 1 \le i \le j - 1\)。假设它不成立,即\(\exists v_i \lt v_j(1 \le i \le j - 1)\)。选择满足\(v_i \lt v_j(1 \le i \le j - 1)\)并且\(v_i\)最小的\(i\)。由引理1(路径引理)可得\(v_i \overset{+}{\to} v_j\),与\(j\)的定义矛盾。此断言得证。
这个断言说明了\(sdom(w) \ge sdom(v_j) \ge x\)。因此当\(k \ge 1\)\(sdom(w) \ge x\),所以\(x = sdom(w)\),此定理得证。

来源

Lengauer T, Tarjan R E. A fast algorithm for finding dominators in a flowgraph[M]. ACM, 1979.

你可能感兴趣的:(Lengauer-Tarjan算法的相关证明)