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

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

13.6.2 Чопорный-Jarn'k алгоритм ı

В Чопорном-Jarn'k алгоритме мы выращиваем минимальное дерево охвата от единственного ı

группа, начинающаяся с некоторой вершины «корня» v. Главная идея подобна тому из алгоритма Дейкстры. Мы начинаем с некоторой вершины v, определяя начальное «облако» вершин C. Затем в каждом повторении мы выбираем край минимального веса e = (v, u), соединяя вершину v в облаке C к вершине u за пределами C. Вершина u тогда принесена в облако C, и процесс повторен, пока дерево охвата не сформировано. Снова, решающий факт о минимальных деревьях охвата прибывает в игру, потому что, всегда выбирая край самого маленького веса, присоединяющийся к вершине в C к одному вне C, мы уверены во всегда добавлении действительного края к ПО СТАНДАРТНОМУ ГОРНОМУ ВРЕМЕНИ.

Чтобы эффективно осуществить этот подход, мы можем взять другую реплику от Дейкстры

алгоритм. Мы поддерживаем этикетку D [u] для каждой вершины u вне облака C, так, чтобы D [u] сохранил вес лучшего текущего края для того, чтобы соединить u с облаком C. Эти этикетки позволяют нам сокращать количество краев, которые мы должны рассмотреть в решении, какая вершина следующая, чтобы присоединиться к облаку. Мы даем псевдокодекс в Кодовом Фрагменте 13.26.

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

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

D [v]¬ 0

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

D [u]¬ + ¥

Инициализируйте T¬∅.

Инициализируйте приоритетную очередь Q с входом ((u, пустой указатель), D [u]) для каждой вершины u,

где (u, пустой указатель) элемент, и D [u]) ключ. в то время как Q не пуст, делают

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

Добавьте вершину u и край e к T.

для каждой вершины z смежный с u, таким образом, что z находится в Q, делают

выполняют процедуру релаксации по краю (u, z)

если w ((u, z)) <D [z] тогда

D [z]¬ w ((u, z))

Изменитесь на (z, (u, z)) элемент вершины z в Q.

Измените на D [z] ключ вершины z в Q.

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

Кодовый Фрагмент 13.26: Чопорный-Jarn'k алгоритм для проблемы ПО СТАНДАРТНОМУ ГОРНОМУ ВРЕМЕНИ. ı

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

Анализ чопорного-Jarn'k алгоритма ı

Позвольте n, и m обозначают число вершин и края входного графа G, respec-tively. Проблемы внедрения для Чопорного-Jarn'k алгоритма подобны тем ı

для алгоритма Дейкстры. Если мы осуществляем приспосабливаемую приоритетную очередь Q как куча, которая поддерживает осведомленные о местоположении записи (Раздел 8.4.2), то мы можем извлечь вершину u в каждом повторении в O (зарегистрируйте n), время. Кроме того, мы можем обновить каждый D [z], стоимость в O (зарегистрируйте n), время, также, который является вычислением, которое рассматривают самое большее однажды для каждого края (u, z). В постоянное время могут быть осуществлены другие шаги в каждом повторении. Таким образом полная продолжительность - O ((n + m), регистрируют n), который является O (m, регистрируют n).

Иллюстрирование чопорного-Jarn'k алгоритма ı

Мы иллюстрируем Чопорный-Jarn'k алгоритм 13.21 в цифрах до 13,22. ı

(a) (b)

(c) (d)

Рисунок 13.21: Чопорный-Jarn'k алгоритм ПО СТАНДАРТНОМУ ГОРНОМУ ВРЕМЕНИ. (Продолжается в рисунке 13.22.) ı