Dominador en la teoría de grafos es una relación binaria en los nodos de un gráfico dirigido con un nodo de entrada distinguido, que muestra la ventaja al pasar la ruta desde el nodo de entrada: el nodo del gráfico domina el nodo (escrito como o ) si hay alguna ruta desde el gráfico nodo de entrada a pasa a través . En particular, cada nodo se domina a sí mismo.
El uso más generalizado es en los gráficos de flujo de control utilizados en la teoría de la construcción de compiladores.
Una forma útil de representar información sobre los dominadores es un árbol llamado árbol de dominadores , donde el nodo de entrada es la raíz y cada nodo domina solo a sus hijos en el árbol [1] .
El dominio en informática fue introducido por primera vez por Reese T. Prosser en 1959 [2] , el algoritmo de cálculo de dominio fue publicado por primera vez 10 años después por Lowry y Medlock ( ES Lowry , CW Medlock ) [3] . El interés renovado en el uso de la relación de dominancia proviene del artículo de 1989 de Ron Cytron , que usa esta relación para calcular eficientemente las funciones φ que se usan en la representación SSA [4] .
La observación clave sobre los dominadores es que si tomamos cualquier ruta acíclica desde el nodo de entrada hasta el nodo , todos los dominadores se ubicarán en esta ruta, además, se ubicarán en el mismo orden a lo largo de cualquier ruta.
Si y y son dominadores de , entonces , o . De ello se deduce que cada nodo , excepto el nodo de entrada, debe tener un solo dominador inmediato, es decir, el dominador más cercano a lo largo de cualquier ruta acíclica desde el nodo de entrada hasta [5] .
La dominancia se usa en los compiladores para formar la representación SSA . Varias optimizaciones del compilador también pueden beneficiarse del uso de dominadores. Para la paralelización automática, es beneficioso conocer todos los nodos dominados por un nodo determinado. El análisis del uso de la memoria puede beneficiarse de un árbol dominador, que facilita la búsqueda de fugas y la identificación del uso excesivo de la memoria. En los sistemas de software, se utilizan para reducir el tamaño del conjunto de prueba [6] .
El dominador del gráfico de implicación se busca en los solucionadores de problemas de satisfacibilidad de fórmulas booleanas de CDCL cuando se analiza la estructura del conflicto [7] .