Русская Википедия:Доминатор (теория графов)

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Доминатор в теории графов — бинарное отношение на узлах ориентированного графа с выделенным входным узлом, показывающее преимущество при прохождении пути от входного узла: узел <math>d</math> графа доминирует над узлом <math>n</math> (записывается как <math>d\,\mathrm{dom}\,n</math> или <math>d \gg n</math>), если любой путь от входного узла графа к <math>n</math> проходит через <math>d</math>. В частности, каждый узел доминирует над самим собой.

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

Полезным способом представления информации о доминаторах является дерево, именуемое деревом доминаторов, в котором входной узел является корнем, а каждый узел <math>d</math> доминирует только над своими потомками в деревеШаблон:Sfn.

История

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

Свойства отношения

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

  • Транзитивность: если <math>a\,\mathrm{dom}\,b</math> и <math>b\,\mathrm{dom}\,c</math>, то <math>a\,\mathrm{dom}\,c</math>,
  • Антисимметричность: если <math>a \neq b</math>, то невозможно одновременное выполнение <math>a\,\mathrm{dom}\,b</math> и <math>b\,\mathrm{dom}\,a</math>.

Если и <math>a</math> и <math>b</math> являются доминаторами <math>n</math>, то должно выполняться либо <math>a\,\mathrm{dom}\,b</math>, либо <math>b\,\mathrm{dom}\,a</math>. Из этого следует, что каждый узел <math>n</math> за исключением входного должен иметь единственный непосредственный доминатор, то есть доминатор, находящийся ближе всего к <math>n</math> вдоль любого ациклического пути от входного узла до <math>n</math>Шаблон:Sfn.

Применение

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

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

Примечания

Шаблон:Примечания

Литература