stringtranslate.com

Dominador (teoría de grafos)

Árbol dominador correspondiente del gráfico de flujo de control

En informática , un nodo d de un gráfico de flujo de control domina a un nodo n si cada ruta desde el nodo de entrada hasta n debe pasar por d . En términos de notación, esto se escribe como d dom n (o, a veces, dn ). Por definición, cada nodo se domina a sí mismo.

Hay una serie de conceptos relacionados:

Historia

La dominancia fue introducida por primera vez por Reese T. Prosser en un artículo de 1959 sobre el análisis de diagramas de flujo. [2] Prosser no presentó un algoritmo para calcular la dominancia, que tuvo que esperar diez años hasta que Edward S. Lowry y CW Medlock lo hicieran. [3] Ron Cytron et al. reavivaron el interés en la dominancia en 1989 cuando la aplicaron al problema de calcular de manera eficiente la ubicación de las funciones φ, que se utilizan en forma de asignación simple estática . [4]

Aplicaciones

Los dominadores, y en particular las fronteras de dominancia, tienen aplicaciones en compiladores para calcular la forma de asignación única estática . Varias optimizaciones de compiladores también pueden beneficiarse de los dominadores. El diagrama de flujo en este caso comprende bloques básicos .

Los dominadores juegan un papel crucial en el análisis del flujo de control al identificar los comportamientos del programa que son relevantes para una declaración u operación específica, lo que ayuda a optimizar y simplificar el flujo de control de los programas para el análisis. [5]

La paralelización automática se beneficia de las fronteras de posdominancia. Este es un método eficiente para calcular la dependencia del control, que es fundamental para el análisis.

El análisis del uso de memoria puede beneficiarse del árbol dominador para encontrar fácilmente fugas e identificar un uso elevado de memoria. [6]

En los sistemas de hardware, los dominadores se utilizan para calcular probabilidades de señales para la generación de pruebas, estimar actividades de conmutación para el análisis de potencia y ruido y seleccionar puntos de corte en la verificación de equivalencia. [7] En los sistemas de software, se utilizan para reducir el tamaño del conjunto de pruebas en técnicas de pruebas estructurales como la cobertura de declaraciones y ramas. [8]

Algoritmos

Sea el nodo de origen en el gráfico de flujo de control . Los dominadores de un nodo se dan mediante la solución máxima de las siguientes ecuaciones de flujo de datos:

El dominador del nodo de inicio es el propio nodo de inicio. El conjunto de dominadores de cualquier otro nodo es la intersección del conjunto de dominadores de todos los predecesores de . El nodo también está en el conjunto de dominadores de .

Un algoritmo para la solución directa es:

// el dominador del nodo de inicio es el inicio mismo Dom(n 0 ) = {n 0 } // Para todos los demás nodos, establezca todos los nodos como dominadores. para cada n en N - {n 0 } Dom(n) = N; // eliminar iterativamente los nodos que no sean dominadores mientras cambia en cualquier Dom(n) para cada n en N - {n 0 }: Dom(n) = {n} unión con intersección sobre Dom(p) para todo p en pred(n)

La solución directa es cuadrática en el número de nodos, o O( n 2 ). Lengauer y Tarjan desarrollaron un algoritmo que es casi lineal, [1] y en la práctica, a excepción de unos pocos gráficos artificiales, el algoritmo y una versión simplificada del mismo son tan rápidos o más rápidos que cualquier otro algoritmo conocido para gráficos de todos los tamaños y su ventaja aumenta con el tamaño del gráfico. [9]

Keith D. Cooper , Timothy J. Harvey y Ken Kennedy de la Universidad Rice describen un algoritmo que esencialmente resuelve las ecuaciones de flujo de datos anteriores pero utiliza estructuras de datos bien diseñadas para mejorar el rendimiento. [10]

Posdominancia

De manera análoga a la definición de dominancia anterior, se dice que un nodo z posdomina a un nodo n si todos los caminos hacia el nodo de salida del grafo que comienzan en n deben pasar por z . De manera similar, el posdominador inmediato de un nodo n es el posdominador de n que no posdomina estrictamente a ningún otro posdominador estricto de n .

Véase también

Referencias

  1. ^ ab Lengauer, Thomas ; Tarjan, Robert Endre (julio de 1979). "Un algoritmo rápido para encontrar dominadores en un diagrama de flujo". ACM Transactions on Programming Languages ​​and Systems . 1 (1): 121–141. CiteSeerX  10.1.1.117.8843 . doi :10.1145/357062.357071. S2CID  976012.
  2. ^ Prosser, Reese T. (1959). "Aplicaciones de matrices booleanas al análisis de diagramas de flujo". Conferencias conjuntas de informática de la AFIPS: artículos presentados en la conferencia conjunta de informática IRE-AIEE-ACM del este del 1 al 3 de diciembre de 1959. IRE-AIEE-ACM '59 (este): 133–138. doi :10.1145/1460299.1460314. S2CID  15546681.
  3. ^ Lowry, Edward S.; Medlock, Cleburne W. (enero de 1969). "Optimización de código objeto". Comunicaciones de la ACM . 12 (1): 13–22. doi : 10.1145/362835.362838 . S2CID  16768560.
  4. ^ Cytron, Ron; Ferrante, Jeanne; Rosen, Barry K.; Wegman, Mark N.; Zadeck, F. Kenneth (1989). "Un método eficiente para calcular la forma de asignación única estática". Actas del 16.º simposio ACM SIGPLAN-SIGACT sobre Principios de lenguajes de programación - POPL '89 . POPL '89. págs. 25–35. doi :10.1145/75277.75280. ISBN 0897912942.S2CID8301431  .​
  5. ^ Tamrawi, Ahmed; Kothari, Suresh (1 de octubre de 2018). "Gráfico de control proyectado para calcular comportamientos de programas relevantes". Ciencia de la programación informática . 163 : 93–114. doi :10.1016/j.scico.2018.04.003. ISSN  0167-6423.
  6. ^ "Dominator Tree". eclipse.org . SAP AG e IBM Corporation. 2012 [2008] . Consultado el 21 de junio de 2013 .
  7. ^ Teslenko, Maxim; Dubrova, Elena (2005). "Un algoritmo eficiente para encontrar dominadores de doble vértice en gráficos de circuitos". Diseño, automatización y pruebas en Europa. Fecha '05. págs. 406–411. CiteSeerX 10.1.1.598.3053 . doi :10.1109/DATE.2005.53. ISBN  9780769522883.S2CID10305833  .​
  8. ^ Dubrova, Elena (2005). "Pruebas estructurales basadas en núcleos mínimos". Diseño, automatización y pruebas en Europa . Fecha '05. págs. 1168–1173. CiteSeerX 10.1.1.583.5547 . doi :10.1109/DATE.2005.284. ISBN .  9780769522883.S2CID11439732  .​
  9. ^ Georgiadis, Loukas; Tarjan, Robert E .; Werneck, Renato F. (2006). "Finding Dominators in Practice" (PDF) . Archivado desde el original (PDF) el 15 de abril de 2024.
  10. ^ Cooper, Keith D .; Harvey, Timothy J; Kennedy, Ken (2001). "Un algoritmo de dominancia simple y rápido" (PDF) .

Enlaces externos