Критерий Тарьяна минимальности остовного дерева — различия между версиями
Sketcher (обсуждение | вклад) (→Литература) |
Sketcher (обсуждение | вклад) (→См.также) |
||
Строка 42: | Строка 42: | ||
== См.также == | == См.также == | ||
* [[Остовные деревья: определения, лемма о безопасном ребре]] | * [[Остовные деревья: определения, лемма о безопасном ребре]] | ||
+ | * [[Минимально узкое остовное дерево]] | ||
+ | * [[Алгоритм Краскала]] | ||
+ | * [[Алгоритм Борувки]] | ||
+ | * [[Алгоритм Прима]] | ||
==Источники информации== | ==Источники информации== |
Версия 23:14, 24 июня 2017
Содержание
Критерий Тарьяна
Теорема (критерий Тарьяна минимальности остовного дерева): |
Остовное дерево минимально тогда и только тогда, когда для любого ребра, не принадлежащего остову, цикл, образуемый этим ребром при добавлении к остову, не содержит рёбер тяжелее этого ребра. |
Доказательство: |
Рассмотрим общий алгоритм построения минимального остовного дерева безопасного ребра. , но сначала, ознакомившись с определениемfunction Generic MST(): while не является остовом do найти безопасное ребро для return В результате алгоритма получится минимальное остовное дерево Легко заметить, что остовное дерево, не удовлетворяющее условию, не минимально. Если для какого-то ребра оказалось, что оно легче некоторых рёбер образуемого цикла, то можно получить остов с меньшим весом, добавив это ребро в остов, и удалив самое тяжелое ребро из цикла. Если же это условие не выполнилось ни для одного ребра, то вес остова при добавлении не изменится. , состоящее полностью из безопасных ребер, так как на каждом шаге добавлялось безопасное ребро. |
Уникальность остовного дерева
Задача: |
Поиск минимального остовного дерева и проверка его на уникальность. |
Алгоритм решения
Построим минимальное остовное дерево используя алгоритм Краскала. Рассмотрим рёбра вне остова в любом порядке. Очередное обозначим . Рассмотрим максимальное ребро на пути и внутри остова:
- Если его вес совпадает с весом ребра, то при добавлении ребра в остов, мы получим остов с циклом на котором несколько рёбер имеют одинаковый вес, значит мы можем удалить любое из них и остовное дерево будет всё ещё минимальным, это нарушает уникальность дерева. На этом алгоритм завершается и по критерию Тарьяна мы можем сказать, что в графе можно построить несколько остовных деревьев.
- Если его вес больше ребра, то заменив ребро мы получим остов с большим весом, этот случай не влияет на уникальность.
- Его вес не может быть меньше ребра из остова, иначе мы смогли бы построить минимальное остовное дерево с меньшим весом.
После рассмотрения всех рёбер, если мы не нашли ребро вне остова, при добавлении которого создаётся цикл с максимальным ребром таким же как и на пути heavy-light декомпозиции.
и , то в графе нету другого остовного дерева и наше дерево уникально. Искать максимальное ребро на пути и в дереве мы можем при помощиАсимптотика
Построение минимального остовного дерева работает за
, нахождение максимального ребра за , максимальное количество рёбер вне остова не больше , каждое ребро проверяется за . Построение heavy-light декомпозиции работает за , остов мы построим один раз, heavy-light декомпозицию тоже один раз, каждое ребро мы не больше одного раза проверим на замену, сложность алгоритма .См.также
- Остовные деревья: определения, лемма о безопасном ребре
- Минимально узкое остовное дерево
- Алгоритм Краскала
- Алгоритм Борувки
- Алгоритм Прима
Источники информации
- Кормен Т., Лейзерсон Ч., Ривест Р., Штайн К. — Алгоритмы. Построение и анализ.