Позвольте T = (V, E) быть деревом |V|
вершин и |E| = |V-1|
краями с известными расходами. Мы хотим построить минимальный вес График G = (V, E '), который охватывает T как уникальное минимальное остовное дерево.Найти диаграмму минимального веса, которая охватывает заданное минимальное остовное дерево
Пример: рассмотрим следующее дерево T. Края в red имеют заданную стоимость. Пунктирные ребра будут добавлены, чтобы построить полный граф из этого дерева.
Минимальный вес полный граф G, которая охватывает T в качестве уникального MST является следующее:
Я пытаюсь найти (полиномиально-временный) алгоритм, который генерирует этот граф. Я смотрю в основном на наконечник, а не на полное решение. До сих пор я разработал следующий алгоритм:
1) Найдите разрез графика, который содержит самый тяжелый край MST веса w_max
и никаких других краев MST. Все остальные края должны быть w_max + 1
. Следующие фотографии иллюстрирует мою мысль:
Edges (1--2), (1--4), (4--5), (2--3) и (2--5) включены в этот разрез C. Единственный край, который включен в MST, - это край (2--3), и это самый тяжелый край в MST, с w=56
. Таким образом, все остальные края должны иметь w=57
. Доказательство. Предположим противное; мы можем заменить (2--3) другим ребром и по-прежнему поддерживать дерево. Теперь вес дерева легче, поэтому (2--3) не принадлежит к MST. Противоречие.
2) Повторите для всех других кромок e_i
из MST, вес w_i
, в порядке уменьшения веса. Возьмите разрез, который включает только e_i
и никаких других краев MST. Любой неизвестный не-MST край этого разреза должен иметь вес w_i + 1
.
Вопросы:
1) Является ли выше алгоритм правильно? Согласно собственности Cut, это должно быть.
2) Могу ли я сделать это более эффективно? У меня нет алгоритма поиска разрезов на моей голове, но я не считаю, что этот подход может быть эффективным.
редактировать: Другой подход, который я имел в своем уме был подход, основанный на алгоритме Крускала:
1) Использование Союз-Find, я перебирать все ребра MST, по возрастанию стоимости, и унифицировать соответствующие вершины под одной и той же компонентой.
2) На каждом шаге два разных компонента унифицированы через край стоимости w
. Любые другие ребра, которые образуют цикл в одном и том же (новом) компоненте, должны иметь стоимость w+1
.
Я не могу доказать это формально, но кажется, что метод kruskal и ваш метод вырезания косвенно одинаковы, не уверен, что у вашего режущего алго есть плохая сложность. – sashas
Вы правы насчет kruskal, это правильно и эффективно – sashas