支配 (圖論)

来自testwiki
跳转到导航 跳转到搜索

Template:Other uses

Template:Multiple issues

1 dom     Template:Color Template:Color 3 4 5 6
2 dom Template:Color Template:Color Template:Color 5 Template:Color
3 dom Template:Color
4 dom Template:Color
5 dom Template:Color
6 dom Template:Color
支配关系图
Template:Color 表示非严格支配
Template:Color 表示直接支配
以1作为开始节点的控制流图实例

计算机科学中,控制流图的一个节点(基本块d 支配节点 n,当且仅当从开始节点(可以理解为源)到节点 n的每一条路径均要经过节点d,写作d dom n (一写作d n)。根据上述定义,容易得到每个节点均支配其自身。

一些相關概念:

  • 说一个节点 d 严格支配节点n,当且仅当 d支配 n 而不等于 n
  • 节点 n 的直接支配节点(immediate dominator),简称 idom 是一个独特的节点,它严格支配节点 n,却不严格支配任何严格支配节点n的其他节点。不是所有的节点均有直接支配节点,如开始节点就没有。
  • 一个节点 d 的可支配边界是一个点集,其中任意节点n均满足, d 能支配 n 的前驱结点,却不能严格支配 n。就是 d 支配能力的极限。
  • 一个支配树是一棵,它的所有节点儿子是被其直接支配的所有节点。由于直接支配节点是唯一的,故其为一棵树,开始节点即为树根。
  • 求解支配树一般使用 Tarjan 算法


求解支配树的一般方法

一般而言,会使用 Tarjan 算法在 O(|V|+|E|)的时间内将其求出

大概步骤

首先来介绍一些这个算法的大概步骤

  1. 对图进行DFS(深度优先遍历)并求出搜索树和DFS序。这里用 dfn[x]表示点 x在dfs序中的位置。
  2. 根据半必经点定理计算出所有的半必经点作为计算必经点的根据
  3. 根据必经点定理修正半必经点,求出支配点。

半必經點

用 idom[x] 表示點 x的直接支配节点,用 semi[x] 表示點 x的半必經點。

那什麼是半必經點呢?

對於一個節點 Y,存在某個點 X能夠通過一系列點 pi(不包含 XY)到達點 Y且 i dfn[i]>dfn[Y],就稱 XY的半必經點,記做 semi[Y]=X

當然一個點的“半必經點” X會有多個,而且這些半必經點一定是搜索樹中點 X的祖先。

對於每個點,只需要保存其半必經點中最小的一個,下文中用表示點的半必經點中值最小的點的編號。

可以更書面一點的描述這個定理:

  • 對於一個節點 Y考慮所有能夠到達它的節點,設其中一個為 X
  • dfn[X]<dfn[Y],則 XY的一個半必經點
  • dfn[X]>dfn[Y],那麼對於 X在搜索樹中的祖先 Z(包括 X),如果滿足 dfn[Z]>dfn[Y]那麼 semi[Z] 也是 Y的半必經點

历史

计算机科学中支配的概念第一次被提出是在Reese T. Prosser在1959年一篇关于流网络的论文中提出的[1] 而在此论文中,Prosser并未提出一种有效算法以计算支配关系,解决这一问题的有效算法直到十年后才被 Edward S. Lowry and C. W. Medlock[2] 提出。Ron Cytron等人在1989年将其应用于高效计算应用于静态单赋值形式的φ 函数时对其重新燃起了兴趣。[3]

参考

4.-{R|https://blog.csdn.net/a710128/article/details/49913553}-