Дополнение графа до сильно связного
Дополнение графа до сильно связного ― вычислительная задача теории графов, входными данными для которой является ориентированный граф. Цель задачи ― добавить минимальное число дуг (или множество дуг с минимальным суммарным весом) так, чтобы исходный граф стал сильно связным.
Задача о дополнении графа до сильно связного была сформулирована Эсвараном Капали и Робертом Тарьяном в 1976 году. Они доказали, что взвешенная версия задачи является NP-полной, а невзвешенная версия может быть решена за линейное времяШаблон:R. Дальнейшее исследование задачи позволило найти приближённый алгоритм и параметризованную сложность для взвешенной версииШаблон:R.
Невзвешенная версия
В невзвешенной версии задачи целью является добавить минимально возможное число дуг так, чтобы исходный орграф стал сильно связным. Алгоритм для невзвешенного случая, предложенный Эсвараном и Тарьяном, использует конденсацию графа (ориентированный ацикличный граф, вершинами которого являются компоненты сильной связности исходного графа).
Пусть ― количество вершин-источников в конденсации (компонент сильной связности с как минимум одной исходящей дугой, но без входящих), ― количество вершин-стоков (компонент сильной связности с как минимум одной входящей дугой, но без исходящих) и ― количество изолированных вершин в конденсации. Тогда число дуг, которые необходимо добавить, как минимум . Это следует из того, что дуг необходимо добавить, чтобы у каждого источника или изолированной вершины появилась хотя бы одна входящая дуга. Аналогично, дуг необходимо добавить, чтобы у каждого стока или изолированной вершины появилась хотя бы одна исходящая дуга. Алгоритм для решения задачи находит в точности необходимых для добавления дугШаблон:R.
Алгоритм Эсварана и Тарьяна использует поиск в глубину по конденсации графа, чтобы найти все пары источников и стоков, обладающие следующими свойствами:Шаблон:R
- Из источника в каждой паре можно достичь стока в этой паре по пути, существующем в исходном графе.
- Из каждого источника, у которого нет пары, можно достичь некоторого стока, у которого пара есть.
- Каждый сток, у которого нет пары, достижим из некоторого источника, у которого пара есть.
Неточность их алгоритма поиска пар источников и стоков была позднее найдена и исправленаШаблон:R.
Когда все вышеописанные пары найдены, дополнить граф до сильно связного можно, добавив в него следующие три набора дуг:Шаблон:R
- Первый набор дуг соединяет пары и изолированные вершины конденсации в один цикл, число дуг в котором равно числу пар и изолированных вершин.
- Второй набор дуг соединяет каждый из оставшихся стоков с одним из оставшихся источников, выбираемых произвольным образом. Таким образом источник и сток присоединяются к циклу пар и изолированных вершин ценой одной дуги для каждой пары источник-сток.
- Предыдущие два набора исключают либо все источники, либо все стоки. Тогда третий набор дуг присоединяет каждый оставшийся источник (или сток) к циклу.
Общее число дуг в данных трёх наборах равно Шаблон:R.
Взвешенная и параметризованная версия
Во взвешенной версии задачи каждая добавляемая дуга имеет заданный вес. Цель задачи ― выбрать множество добавляемых дуг с минимальным суммарным весом так, чтобы исходный граф стал сильно связным. Данная задача является NP-полной.Шаблон:R 2-приближённый алгоритм был предложен Шаблон:Harvtxt.Шаблон:R Параметризованная и взвешенная версия задачи, в которой необходимо добавить не более чем дуг с минимальным суммарным весом, сделав граф сильно связным, является FPT-задачейШаблон:R.