Критерий Тарьяна минимальности остовного дерева — различия между версиями
Sketcher (обсуждение | вклад) (→Критерий Тарьяна) |
Sketcher (обсуждение | вклад) (→Критерий Тарьяна) |
||
| Строка 8: | Строка 8: | ||
<tex> \Rightarrow </tex> | <tex> \Rightarrow </tex> | ||
| − | + | Докажем, что остовное дерево <tex> A </tex>, состоящее из ребер наименьшего веса на циклах, минимально. | |
Предположим противное: в дереве <tex> A </tex> не все минимальные ребра на циклах. Тогда, найдется цикл в графе <tex> G </tex>, в котором есть ребро <tex> (u, v) \notin A</tex>, которое легче остальных ребер этого цикла, включая ребро <tex> (a, b) \in A</tex>. Следовательно, можно получить остов с меньшим весом, удалив ребро <tex> (a, b) </tex>, и, добавив <tex> (u, v) </tex>. Поэтому, дерево содержащее ребра не наименьшего веса на циклах не минимально {{---}} противоречие. | Предположим противное: в дереве <tex> A </tex> не все минимальные ребра на циклах. Тогда, найдется цикл в графе <tex> G </tex>, в котором есть ребро <tex> (u, v) \notin A</tex>, которое легче остальных ребер этого цикла, включая ребро <tex> (a, b) \in A</tex>. Следовательно, можно получить остов с меньшим весом, удалив ребро <tex> (a, b) </tex>, и, добавив <tex> (u, v) </tex>. Поэтому, дерево содержащее ребра не наименьшего веса на циклах не минимально {{---}} противоречие. | ||
Версия 16:48, 25 июня 2017
Содержание
Критерий Тарьяна
| Теорема (критерий Тарьяна минимальности остовного дерева): |
Остовное дерево минимально тогда и только тогда, когда для любого ребра, не принадлежащего остову, цикл, образуемый этим ребром при добавлении к остову, не содержит рёбер тяжелее этого ребра. |
| Доказательство: |
|
Докажем, что остовное дерево , состоящее из ребер наименьшего веса на циклах, минимально. Предположим противное: в дереве не все минимальные ребра на циклах. Тогда, найдется цикл в графе , в котором есть ребро , которое легче остальных ребер этого цикла, включая ребро . Следовательно, можно получить остов с меньшим весом, удалив ребро , и, добавив . Поэтому, дерево содержащее ребра не наименьшего веса на циклах не минимально — противоречие.
Построим минимальное остовное дерево , с помощью общего алгоритма построения MST. Докажем, что оно имеет минимальные ребра на каждом цикле. function Generic MST(): while не является остовом do найти безопасное ребро для // нужное ребро находится с помощью леммы о безопасном ребре return Заметим, что дерево состоит полностью из безопасных ребер, так как на каждом шаге добавлялось безопасное ребро. Теперь, рассмотрим какой-нибудь разрез уже построенного дерева и пересекающее ребро , причем , а . Найдем путь в изначальном графе , соединяющий вершины и . Так как они находятся в разных компонентах связности, то какое-нибудь ребро тоже будет пересекать разрез . Очевидно, что , так как первое — безопасное ребро. Следовательно, любое ребро не легче ребер на этом цикле. |
Уникальность остовного дерева
| Задача: |
| Поиск минимального остовного дерева и проверка его на уникальность. |
Алгоритм решения
Построим минимальное остовное дерево используя алгоритм Краскала. Рассмотрим рёбра вне остова в любом порядке. Очередное обозначим . Рассмотрим максимальное ребро на пути и внутри остова:
- Если его вес совпадает с весом ребра, то при добавлении ребра в остов, мы получим остов с циклом на котором несколько рёбер имеют одинаковый вес, значит мы можем удалить любое из них и остовное дерево будет всё ещё минимальным, это нарушает уникальность дерева. На этом алгоритм завершается и по критерию Тарьяна мы можем сказать, что в графе можно построить несколько остовных деревьев.
- Если его вес больше ребра, то заменив ребро мы получим остов с большим весом, этот случай не влияет на уникальность.
- Его вес не может быть меньше ребра из остова, иначе мы смогли бы построить минимальное остовное дерево с меньшим весом.
После рассмотрения всех рёбер, если мы не нашли ребро вне остова, при добавлении которого создаётся цикл с максимальным ребром таким же как и на пути и , то в графе нету другого остовного дерева и наше дерево уникально. Искать максимальное ребро на пути и в дереве мы можем при помощи heavy-light декомпозиции.
Асимптотика
Построение минимального остовного дерева работает за , нахождение максимального ребра за , максимальное количество рёбер вне остова не больше , каждое ребро проверяется за . Построение heavy-light декомпозиции работает за , остов мы построим один раз, heavy-light декомпозицию тоже один раз, каждое ребро мы не больше одного раза проверим на замену, сложность алгоритма .
См.также
- Остовные деревья: определения, лемма о безопасном ребре
- Минимально узкое остовное дерево
- Алгоритм Краскала
- Алгоритм Борувки
- Алгоритм Прима
Источники информации
- Кормен Т., Лейзерсон Ч., Ривест Р., Штайн К. — Алгоритмы. Построение и анализ.