Доминатор в теории графов — бинарное отношение на узлах ориентированного графа с выделенным входным узлом, показывающее преимущество при прохождении пути от входного узла: узел графа доминирует над узлом (записывается как или ), если любой путь от входного узла графа к проходит через . В частности, каждый узел доминирует над самим собой.
Наиболее широкое применение получили в графах потока управления, используемых в теории построения компиляторов.
Полезным способом представления информации о доминаторах является дерево, именуемое деревом доминаторов, в котором входной узел является корнем, а каждый узел доминирует только над своими потомками в дереве[1].
Доминирование в информатике впервые ввёл Рис Проссер (Reese T. Prosser) в 1959 году[2], алгоритм вычисления доминирования впервые опубликован спустя 10 лет Лоури и Медлоком (E. S. Lowry, C. W. Medlock)[3]. Возобновление интереса к применению отношения доминирования связано с работой Рона Ситрона (Ron Cytron) 1989 года, в которой это отношение использовано для эффективного вычисления φ-функций, которые используются в SSA-представлении[4].
Ключевое наблюдение, касающееся доминаторов, заключается в том, что если мы возьмем любой ациклический путь от входного узла к узлу , то все доминаторы будут располагаться на этом пути, более того — они будут располагаться в одном и том же порядке вдоль любого пути.
Если и и являются доминаторами , то должно выполняться либо , либо . Из этого следует, что каждый узел за исключением входного должен иметь единственный непосредственный доминатор, то есть доминатор, находящийся ближе всего к вдоль любого ациклического пути от входного узла до [5].
Доминирование используется в компиляторах для формирования SSA-представления. Ряд оптимизаций компилятора может также извлечь выгоду из использования доминаторов. Для автоматического распараллеливания выгодно знать все узлы, над которыми доминирует данный узел. Анализ использования памяти может извлечь выгоду из дерева доминаторов, с помощью которого легко найти утечку и определить излишнее использование памяти. В программных системах, они используются для уменьшения размеров тестового набора[6].
Доминатор импликационного графа ищется в CDCL-решателях задач выполнимости булевых формул при анализе структуры конфликта[7].
|coauthors=
(справка)
|coauthors=
(справка)Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".
Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.
Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .