Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Data Structures and Algorithms in C++ 2e (На ру...docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.37 Mб
Скачать

646 Глава 13. Алгоритмы графа

Решающий факт о минимальных деревьях охвата

Два алгоритма ПО СТАНДАРТНОМУ ГОРНОМУ ВРЕМЕНИ, которые мы обсуждаем, основаны на жадном методе, который в этом

случай зависит кардинально от следующего факта. (См. рисунок 13.17.)

Рисунок 13.17: решающий факт о минимальных деревьях охвата.

Суждение 13.24: Позвольте G быть взвешенным связанным графом и позволить V1 и V2 быть разделением вершин G в два несвязных непустых набора. Кроме того, позвольте e быть краем в G с минимальным весом из числа тех с одной конечной точкой в V1 и другим в V2. Есть минимальное дерево охвата T, у которого есть e как один из его краев.

Оправдание: Позвольте T быть минимальным деревом охвата G. Если T не содержит край e, добавление e к T должно создать цикл. Поэтому, есть некоторый край f этого цикла, у которого есть одна конечная точка в V1 и другой в V2. Кроме того,

выбор e, w (e)£ w (f). Если мы удаляем f из TÈ{e}, мы получаем дерево охвата

чья общая масса не больше, чем прежде. Так как T - минимальное дерево охвата,

это новое дерево должно также быть минимальным деревом охвата.

Фактически, если веса в G отличны, то минимальное дерево охвата

уникальный. Мы оставляем оправдание этого менее решающего факта как осуществление (C-13.17 Осуществления). Кроме того, обратите внимание на то, что Суждение 13.24 остается действительным, даже если граф G содержит края отрицательного веса или циклы отрицательного веса, в отличие от алгоритмов, которые мы представили для кратчайших путей.

13.6. Минимальные деревья охвата 647

13.6.1 Алгоритм Краскэла

Причина Суждение 13.24 так важно, состоит в том, что оно может использоваться в качестве основания для строительства минимального дерева охвата. В алгоритме Краскэла это используется, чтобы построить минимальное дерево охвата в группах. Первоначально, каждая вершина находится в своей собственной группе совершенно отдельно. Алгоритм тогда считает каждый край в свою очередь, заказанным, увеличивая вес. Если край e соединяет две различных группы, то e добавлен к набору краев минимального дерева охвата, и эти две группы, связанные e, слиты в единственную группу. Если с другой стороны e соединяет две вершины, которые уже находятся в той же самой группе, то от e отказываются. Как только алгоритм добавил достаточно краев, чтобы сформировать дерево охвата, он заканчивает и производит это дерево как минимальное дерево охвата.

Мы даем псевдокодекс для алгоритма Краскэла ПО СТАНДАРТНОМУ ГОРНОМУ ВРЕМЕНИ в Кодовом Фрагменте 13.25

и мы показываем работу этого алгоритма 13.18 в цифрах, 13.19, и 13.20.

Алгоритм Kruskal (G):

Вход: простой связанный взвешенный граф G с n вершинами и m Продукцией краев: минимальное дерево охвата T для G

для каждой вершины v в G делают

Определите элементарную группу C (v)¬{v}.

Инициализируйте приоритетную очередь Q, чтобы содержать все края в G, используя веса в качестве ключей.

T¬ ∅ T будет в конечном счете содержать края ПО СТАНДАРТНОМУ ГОРНОМУ ВРЕМЕНИ

в то время как у T есть меньше, чем n- 1 край делает

(u, v)¬ Q.removeMin ()

Позвольте C (v) быть группой, содержащей v и позволить C (u) быть группой, содержащей u.

если C (v) = C (u) тогда

Добавьте край (v, u) к T. Слейте C (v) и C (u) в одну группу, то есть, союз C (v) и C (u).

возвратите дерево T

Кодовый Фрагмент 13.25: алгоритм Краскэла для проблемы ПО СТАНДАРТНОМУ ГОРНОМУ ВРЕМЕНИ.

Как упомянуто прежде, правильность алгоритма Краскэла следует из решающего факта о минимальных деревьях охвата, Суждение 13.24. Каждый раз, когда алгоритм Краскэла добавляет край (v, u) к минимальному дереву охвата T, мы можем определить разделение набора вершин V (как в суждении), позволив V1 быть группой, содержащей v и позволяющей V2 содержать остальную часть вершин в V. Это ясно определяет несвязное разделение вершин V и, что еще более важно, так как мы извлекаем края из Q в заказе их весами, e должен быть краем минимального веса с одной вершиной в V1 и другим в V2. Таким образом алгоритм Краскэла всегда добавляет действительный минимальный край дерева охвата.