Tarjan的支配树算法

这篇文章介绍了Tarjan的快速支配算法1。这个算法很有洞察力地利用了”半支配“的性质。

流图G=(V,E,r)上进行深度优先搜索后,节点按照发现顺序编号(论文从1编号)。搜索产生了以r为根的搜索树T,编号正是前序遍历序号。本文假设所有节点以此序号标识。

引理 1如果G上的两节点v,w,满足vw,那么任何vw的路径一定经过v,wT上的共同祖先。 定义 2半支配者sdom(w)定义为:

sdom(w)=min{v存在路径v=v0,v1,,vk=w 满足i(1ik1vi>w)}

本文中的xy是指在T上,xy的祖先。x+y是指在T上,xy的祖先且xy

引理 3对任何wridom(w)+w 引理 4对任何wrsdom(w)+w 证明 4由于G上存在路径parent(w)w,由定义 2sdom(w)parent(w)<w。由引理 1sdom(w)w的路径一定经过sdom(w),w的共同祖先。共同祖先sdom(w),故而共同祖先只能是sdom(w)
引理 5对任何wridom(w)sdom(w) 证明 5sdom(w)取到的路径上,除了sdom(w),w没有w的祖先,故而都不是idom(w)而路径rsdom(w)拼接上sdom(w)取到的路径组成的路径上一定有idom(w),故而idom(w)sdom(w)
引理 6节点v,w满足vw,那么vidom(w)idom(w)idom(v) 证明 6其实这条定理是说idom(w)不可能位于idom(v)v之间。反之,idom(v)v存在不经过sdom(w)的路径,将这个路径拼接上ridom(v)v(w),就得到了不经过sdom(w)到达w的路径,矛盾。
定理 7对于wr,如果对于所有满足sdom(w)+uwu,都有sdom(u)sdom(w),那么idom(w)=sdom(w) 证明 7只需要证明sdom(w)支配w。任取从rw的路径,现在证明路径上一定有sdom(w)。令x是这个路径上最后一个满足x<sdom(w)的节点,如果不存在,那么sdom(w)=r,原命题成立。令y是这个路径上第一个满足sdom(w)yw的节点。对于路径上xy之间的节点v,一定有v>y。否则的话路径上有v,yy的共同祖先,且该祖先sdom(w),那么这与y的选取矛盾。故而sdom(y)x<sdom(w),所以只可能y=sdom(w),即路径一定包括sdom(w)
定理 8对于wr,令u是满足sdom(w)+uw的节点中sdom(u)最小的那个,那么sdom(u)sdom(w)idom(u)=idom(w) 证明 8对于sdom(w)zwsdom(z)sdom(w),所以一定有sdom(u)sdom(w)。接下来证明idom(u)=idom(w)。由引理 6,一定有idom(w)idom(u),接下来证明idom(u)支配w。任取从rw的路径,现在证明路径上一定有idom(u)。令x是这个路径上最后一个满足x<idom(u)的节点,如果不存在,那么idom(u)=r,原命题成立。令y是这个路径上第一个满足idom(u)yw的节点。对于路径上xy之间的节点v,一定有v>y,证明同定理 7的相关证明。故而sdom(y)x<idom(u)sdom(u)。然而u是满足sdom(w)+uwsdom(u)最小的,故idom(u)ysdom(w)+u。然而y不可能在idom(u)u的中间。否则rsdom(y)拼接上sdom(y)取的路径再拼接上y+u形成的路径,避开了idom(u)。所以只可能y=idom(u),即路径一定包括idom(u)
推论 9对于wr,令u是满足sdom(w)+uw的节点中sdom(u)最小的那个,那么:

idom(w)={sdom(w)if sdom(w)=sdom(u)idom(u)otherwise

定理 10对于wr

sdom(w)=min({v(v,w)Ev<w}{sdom(u)u>w(v,w)Euv})

证明 10x是上式右侧。先证明sdom(w)x。如果x满足(x,w)Ex<w,那么由定义 2sdom(w)x。如果x满足x=sdom(u)u>w(v,w)Euv,那么sdom(u)选的路径中间的点>u>wuv上的点u>w,最后这两条路径拼接上(v,w)的到的路径满足sdom(w)的候选路径,故而sdom(w)x

接着证明sdom(w)x。如果sdom(w)所选的路径sdom(w)=v0,v1,,vk=w长度为1,那么(sdom(w),w)Esdom(w)<w,故而sdom(w)x。如果sdom(w)所选的路径长度大于1。令j1vjvk1最小的,那么对于1ij1,一定有vi>vj。否则,取i满足1ij1vi最小。那么有vivj的路径经过了共同祖先,那么vi由于最小,一定是共同祖先,那么vi+vj,与j的选取矛盾。此时就有sdom(w)sdom(vj)x

定理 10其实是说,sdom(w)所选的路径,一定是:

  1. 树边、前向边开始
  2. 接着若干(n0):
    1. 若干树边(n0
    2. 回边或者交叉边,到比上一步小的节点

  1. Lengauer, Thomas, and Robert Endre Tarjan. “A fast algorithm for finding dominators in a flowgraph.” ACM Transactions on Programming Languages and Systems (TOPLAS) 1.1 (1979): 121-141. ↩︎

编辑本页

孙子平
孙子平
静态分析方向研究生
下一页
上一页

相关