Cómo calcular los dominadores de un grafo: el algoritmo simple y rápido de 2001

Fuentes: Computing graph dominators

El concepto de dominador en un grafo —un nodo por el que pasan todos los caminos desde la raíz hasta otro nodo dado— es una herramienta habitual para analizar dependencias, sistemas de compilación y análisis estático de programas. Este texto explica, de forma accesible y con ejemplos visuales interactivos, el algoritmo conocido como "Simple, Fast Dominance Algorithm" (Cooper, Harvey y Kennedy, 2001) para construir el árbol de dominadores de un grafo dirigido.

El artículo parte de las definiciones básicas: un nodo x domina a y si todo camino de la raíz a y pasa por x, y x domina inmediatamente a y si es el dominador más cercano por encima de él en el árbol. A partir de ahí, presenta la ecuación de flujo de datos que formaliza el cálculo: el conjunto de dominadores de un nodo es la intersección de los conjuntos de dominadores de sus predecesores, unido al propio nodo.

El autor recorre después el papel del recorrido en postorden inverso (RPO), clave para acotar el número de iteraciones del algoritmo, y compara el método con el clásico de Lengauer-Tarjan (1979) y con variantes usadas en LLVM, señalando que para grafos de tamaño moderado las diferencias de rendimiento importan poco. Termina introduciendo el truco central: en lugar de calcular conjuntos de dominadores, basta con calcular el dominador inmediato de cada nodo, lo que produce directamente el árbol de dominadores en pocas iteraciones. Es, en resumen, una guía didáctica para entender uno de los algoritmos clásicos de la teoría de grafos aplicada a la ingeniería de software.