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算法的相关证明的更多相关文章

  1. 有向图tarjan算法求连通分量的粗浅讲解、证明, // hdu1269

    打算开始重新复习一遍相关算法.对于有向图tarjan算法,通过学习过很多说法,结合自己的理解,下面给出算法自己的观点. 算法总模型是一个dfs,结合一个stack(存放当前尚未形成SCC的点集合),记 ...

  2. tarjan算法求scc & 缩点

    前置知识 图的遍历(dfs) 强连通&强连通分量 对于有向图G中的任意两个顶点u和v存在u->v的一条路径,同时也存在v->u的路径,我们则称这两个顶点强连通.以此类推,强连通分量 ...

  3. (转载)LCA问题的Tarjan算法

    转载自:Click Here LCA问题(Lowest Common Ancestors,最近公共祖先问题),是指给定一棵有根树T,给出若干个查询LCA(u, v)(通常查询数量较大),每次求树T中两 ...

  4. 强连通分量的Tarjan算法

    资料参考 Tarjan算法寻找有向图的强连通分量 基于强联通的tarjan算法详解 有向图强连通分量的Tarjan算法 处理SCC(强连通分量问题)的Tarjan算法 强连通分量的三种算法分析 Tar ...

  5. Tarjan算法详解理解集合

    [功能] Tarjan算法的用途之一是,求一个有向图G=(V,E)里极大强连通分量.强连通分量是指有向图G里顶点间能互相到达的子图.而如果一个强连通分量已经没有被其它强通分量完全包含的话,那么这个强连 ...

  6. Tarjan算法求有向图的强连通分量

    算法描述 tarjan算法思想:从一个点开始,进行深度优先遍历,同时记录到达该点的时间(dfn记录到达i点的时间),和该点能直接或间接到达的点中的最早的时间(low[i]记录这个值,其中low的初始值 ...

  7. tarjan算法 POJ3177-Redundant Paths

    参考资料传送门 http://blog.csdn.net/lyy289065406/article/details/6762370 http://blog.csdn.net/lyy289065406/ ...

  8. 有向强连通分支Tarjan算法

    本文转载自:http://blog.csdn.net/xinghongduo/article/details/6195337 说到以Tarjan命名的算法,我们经常提到的有3个,其中就包括本文所介绍的 ...

  9. tarjan算法大意

    Tarjan算法 (以发现者Robert Tarjan命名)是一个在图中寻找强连通分量的算法.算法的基本思想为:任选一结点开始进行深度优先搜索dfs(若深度优先搜索结束后仍有未访问的结点,则再从中任选 ...

随机推荐

  1. Reactjs之实现js跳转路由

    1.新增知识 /* 实现js跳转路由:https://reacttraining.com/react-router/web/example/auth-workflow 1.要引入Redirect im ...

  2. Centos 7 安装tomcat并部署jar实录

    本文目的 纯属记录,以备后查. 1.安装JAVA JDK 安装jdk略. 配置JDK,打开/etc/profile文件,在最后添加如下代码: JAVA_HOME=/usr/java/jdk1..0_2 ...

  3. :成功配置 centos + nginx + .net core 2.0

    https://segmentfault.com/a/1190000010763523

  4. github创建项目,并提交本地文件

    1.如图所示,不要点选"Initialize this repository with README",不然就看不到第二幅图的提示信息了 2.根据下面提示,初始化本地文件,然后上传

  5. USACO2.2 Preface Numbering【思维+打表】

    这道题乍一看没有什么思路,细看还是没有什么思路 嗯,细看还是可以看出些什么端倪. 不能复合嵌套什么的 总结一下就只有这样3种规则: 1.IXCM最多三个同样连续 加起来2.递减:加起来 注意VLD不连 ...

  6. Vue 子组件,向父组件传递。

  7. Java作业 题目:16版.真实员工数统计

    题目:16版.真实员工数统计 该资源支持按部自动给分,评分规则如下: sjkdfhslkfdhdsiog函数定义测试 sjkdfhslkfdhdsiog函数定义测试 sjkdfhslkfdhdsiog ...

  8. sql server 获取整数的函数ceiling(x)和floor(x)

    --ceiling(x)返回不小于x的最小整数值,floor(x)返回不大于x的最大整数值 示例:select CEILING(-3.35), CEILING(3.35), FLOOR(-3.35), ...

  9. npm学习(十)之如何使用创建、发布、使用作用域包

    前言 要求npm版本2或更高 作用域用于将相关包分组在一起,并为npm模块创建一个名称空间(类似于域).这里有更详细的解释. 如果一个包的名称以@开头,那么它就是一个有作用域的包.范围是@和斜杠之间的 ...

  10. ES各种操作的过程

    参考:https://blog.csdn.net/better_xf/article/details/81188050 一.es写入数据的过程 客户端选择一个node发送请求过去,这个node就是co ...