흐름 그래프에서 "반드시 거치는" 정점
시작점 \(s\)가 있는 유향 그래프(흐름 그래프)에서, 정점 \(w\)를 지배(dominate) 하는 정점 \(v\)란:
\(s\)에서 \(w\)로 가는 모든 경로가 \(v\)를 지난다.
\(w\) 자신과 \(s\)는 항상 \(w\)를 지배한다. \(w\)의 지배자 중 \(w\)가 아니면서 가장 가까운(다른 모든 지배자에게 지배되는) 것이 즉시 지배자(immediate dominator) \(\text{idom}(w)\)다.
도미네이터 트리
각 정점 \(w \neq s\)를 그 부모 \(\text{idom}(w)\)에 연결하면 \(s\)를 루트로 하는 트리가 된다. 이것이 도미네이터 트리다. 핵심 성질:
\(v\)가 \(w\)를 지배할 필요충분조건은, 도미네이터 트리에서 \(v\)가 \(w\)의 조상인 것.
즉 "지배 = 트리 조상 관계"로 압축된다. 컴파일러 최적화(SSA, 루프 분석), 회로 분석, 그래프 신뢰성에서 핵심 자료구조다.
즉시 지배자의 유일성
\(\text{idom}(w)\)가 유일하다는 것은 비자명하다. \(w\)를 지배하는 정점들 \(D(w) \setminus \{w\}\)가 전순서 를 이룬다는 보조정리에서 따른다: \(a, b\)가 모두 \(w\)를 지배하면, \(s \to w\) 경로 위에서 \(a\)가 먼저 나오거나 \(b\)가 먼저 나오므로 둘 중 하나가 다른 하나를 지배한다. 따라서 가장 가까운 지배자가 유일하게 결정된다.
단순 알고리즘: 정점 제거 테스트
각 정점 \(v\)를 지우고 \(s\)에서 BFS/DFS로 도달 가능성을 본다. \(v\) 제거로 도달 불가능해진 정점들이 \(v\)에 지배된다. \(O(V \cdot E)\). 작은 그래프엔 충분하지만, 큰 그래프엔 느리다.
Lengauer–Tarjan: \(O(E \alpha(V))\)
표준 고속 알고리즘. 골자:
- \(s\)에서 DFS, DFS 번호(dfn) 부여.
- 각 정점 \(w\)의 semi-dominator \(\text{sdom}(w)\) 계산:
$$ \text{sdom}(w) = \min\{\,\text{dfn}(v) : (v, \dots, w)\text{ 경로의 내부 정점이 모두 dfn} > \text{dfn}(w)\,\}. $$
직관적으로 "DFS 트리 바깥의 더 일찍 발견된 정점에서 들어오는 최소 진입점". - semi-dom으로부터 idom을 보정(두 경우의 규칙).
semi-dom 계산과 idom 보정 모두 link-eval (경로 압축이 있는 union-find 변형)으로 처리해 거의 선형이다.
semi → idom 보정 규칙
DFS 트리 경로 \(\text{sdom}(w) \to w\) 에서 sdom이 최소인 정점을 \(u\)라 하면:
$$ \text{idom}(w) = \begin{cases} \text{sdom}(w), & \text{sdom}(u) = \text{sdom}(w) \\ \text{idom}(u), & \text{그 외 (지연 결정)}.\end{cases} $$
지연된 경우는 dfn 역순으로 한 번 더 훑어 확정한다.
정리
- 지배 = 도미네이터 트리의 조상 관계.
- idom 유일성은 지배자 전순서에서.
- Lengauer–Tarjan으로 거의 선형. 다음 강의에서 구현.