这篇文章介绍了Tarjan的快速支配算法。这个算法很有洞察力地利用了”半支配“的性质。
流图上进行深度优先搜索后,节点按照发现顺序编号(论文从1编号)。搜索产生了以为根的搜索树,编号正是前序遍历序号。本文假设所有节点以此序号标识。
引理 1如果上的两节点,满足,那么任何到的路径一定经过在上的共同祖先。
定义 2半支配者定义为:
本文中的是指在上,是的祖先。是指在上,是的祖先且。
引理 3对任何,。
引理 4对任何,。
证明 4由于上存在路径,由定义 2知。由引理 1,到的路径一定经过的共同祖先。共同祖先,故而共同祖先只能是。
引理 5对任何,。
证明 5取到的路径上,除了没有的祖先,故而都不是而路径拼接上取到的路径组成的路径上一定有,故而
引理 6节点满足,那么或。
证明 6其实这条定理是说不可能位于与之间。反之,到存在不经过的路径,将这个路径拼接上和,就得到了不经过到达的路径,矛盾。
定理 7对于,如果对于所有满足的,都有,那么。
证明 7只需要证明支配。任取从到的路径,现在证明路径上一定有。令是这个路径上最后一个满足的节点,如果不存在,那么,原命题成立。令是这个路径上第一个满足的节点。对于路径上与之间的节点,一定有。否则的话路径上有且的共同祖先,且该祖先,那么这与的选取矛盾。故而,所以只可能,即路径一定包括。
定理 8对于,令是满足的节点中最小的那个,那么且。
证明 8对于,,所以一定有。接下来证明。由引理 6,一定有,接下来证明支配。任取从到的路径,现在证明路径上一定有。令是这个路径上最后一个满足的节点,如果不存在,那么,原命题成立。令是这个路径上第一个满足的节点。对于路径上与之间的节点,一定有,证明同定理 7的相关证明。故而。然而是满足,最小的,故。然而不可能在和的中间。否则拼接上取的路径再拼接上形成的路径,避开了。所以只可能,即路径一定包括。
推论 9对于,令是满足的节点中最小的那个,那么:
定理 10对于:
证明 10令是上式右侧。先证明。如果满足,那么由定义 2,。如果满足,那么选的路径中间的点,上的点,最后这两条路径拼接上的到的路径满足的候选路径,故而。
接着证明。如果所选的路径长度为1,那么,故而。如果所选的路径长度大于1。令是最小的,那么对于,一定有。否则,取满足且最小。那么有到的路径经过了共同祖先,那么由于最小,一定是共同祖先,那么,与的选取矛盾。此时就有。
定理 10其实是说,所选的路径,一定是:
- 树边、前向边开始
- 接着若干():
- 若干树边()
- 回边或者交叉边,到比上一步小的节点