Вот полный вопрос:
Предположим, у нас есть ориентированный граф G = (V, E), мы хотим найти граф G '= (V, E'), который обладает следующими свойствами:
- G 'имеет те же компоненты связности, что и G
- G 'имеет тот же граф компонентов, что и G
- E 'минимизирован. То есть E 'как можно меньше.
Вот что у меня получилось:
Сначала запустите алгоритм сильно связанных компонентов. Теперь у нас есть сильно связные компоненты. Теперь перейдите к каждому компоненту сильной связности и внутри этого SCC выполните простой цикл; то есть цикл, в котором единственными повторяющимися узлами являются узлы начала / окончания. Это минимизирует края внутри каждого SCC.
Теперь нам нужно минимизировать границы между SCC. Увы, я не могу придумать, как это сделать.
У меня два вопроса: (1) Правильно ли звучит алгоритм предшествующий части о минимизации краев между SCC? (2) Как минимизировать границы между SCC.
Что касается (2), я знаю, что это эквивалентно минимизации количества ребер в DAG. (Думайте о SCC как о вершинах). Но, похоже, это мне не помогает.