Доминатор (теория графов)

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

Доминатор в теории графов — бинарное отношение на узлах ориентированного графа с выделенным входным узлом, показывающее преимущество при прохождении пути от входного узла: узел графа доминирует над узлом (записывается как или ), если любой путь от входного узла графа к проходит через . В частности, каждый узел доминирует над самим собой.

Наиболее широкое применение получили в графах потока управления, используемых в теории построения компиляторов.

Полезным способом представления информации о доминаторах является дерево, именуемое деревом доминаторов, в котором входной узел является корнем, а каждый узел доминирует только над своими потомками в дереве[1].

История[править | править код]

Доминирование в информатике впервые ввёл Рис Проссер (Reese T. Prosser) в 1959 году[2], алгоритм вычисления доминирования впервые опубликован спустя 10 лет Лоури и Медлоком (E. S. Lowry, C. W. Medlock)[3]. Возобновление интереса к применению отношения доминирования связано с работой Рона Ситрона (Ron Cytron) 1989 года, в которой это отношение использовано для эффективного вычисления φ-функций, которые используются в SSA-представлении[4].

Свойства отношения[править | править код]

Ключевое наблюдение, касающееся доминаторов, заключается в том, что если мы возьмем любой ациклический путь от входного узла к узлу , то все доминаторы будут располагаться на этом пути, более того — они будут располагаться в одном и том же порядке вдоль любого пути.

  • Транзитивность: если и , то ,
  • Антисимметричность: если , то невозможно одновременное выполнение и .

Если и и являются доминаторами , то должно выполняться либо , либо . Из этого следует, что каждый узел за исключением входного должен иметь единственный непосредственный доминатор, то есть доминатор, находящийся ближе всего к вдоль любого ациклического пути от входного узла до [5].

Применение[править | править код]

Доминирование используется в компиляторах для формирования SSA-представления. Ряд оптимизаций компилятора может также извлечь выгоду из использования доминаторов. Для автоматического распараллеливания выгодно знать все узлы, над которыми доминирует данный узел. Анализ использования памяти может извлечь выгоду из дерева доминаторов, с помощью которого легко найти утечку и определить излишнее использование памяти. В программных системах, они используются для уменьшения размеров тестового набора[6].

Доминатор импликационного графа ищется в CDCL-решателях задач выполнимости булевых формул при анализе структуры конфликта[7].

Примечания[править | править код]

  1. Компиляторы: принципы, технологии и инструменты, 2008, с. 787.
  2. Prosser, Reese T. Applications of Boolean matrices to the analysis of flow diagrams (англ.) // AFIPS Joint Computer Conferences: Papers presented at the December 1–3, 1959, eastern joint IRE-AIEE-ACM computer conference : journal. — Boston, MA: ACM, 1959. — P. 133—138.
  3. Lowry, Edward S.; and Medlock, Cleburne W. Object code optimization (англ.) // Communications of the ACM : journal. — 1969. — January (vol. 12, no. 1). — P. 13—22.
  4. Cytron, Ron; Hind, Michael; and Hsieh, Wilson. Automatic Generation of DAG Parallelism (неопр.) // Proceedings of the ACM SIGPLAN 89 Conference on Programming Language Design and Implementation. — 1989. — С. 54—68.
  5. Компиляторы: принципы, технологии и инструменты, 2008, с. 788.
  6. Dubrova, Elena. Structural Testing Based on Minimum Kernels (неопр.) // Proceedings of Design and Test in Europe Conference. — 2005. — С. 1168—1173. Архивировано 15 февраля 2019 года.
  7. Armin Biere, Marijn Heule, Hans van Maaren and Toby Walsch. Chapter 4. Conflict-Driven Clause Learning SAT Solvers // Handbook of Satisfiability. — IOS Press, 2008. — P. 135.

Литература[править | править код]

  • Альфред В. Ахо, Моника С. Лам, Рави Сети, Джеффри Д. Ульман. Компиляторы: принципы, технологии и инструменты = Compilers: Principles, Techniques, and Tools. — Издательский дом "Вильямс", 2008. — ISBN 0-321-48681-1.