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

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

Продолжительность алгоритма Дейкстры

В этой секции мы анализируем сложность времени алгоритма Дейкстры. Мы обозначаем

число вершин и края входного графа G с n и m, соответственно. Мы предполагаем, что веса края могут быть добавлены и сравнены в постоянное время. Из-за высокого уровня описания мы дали для алгоритма Дейкстры в Кодовом Фрагменте 13.24, анализирование его продолжительности требует, чтобы мы дали больше деталей о его внедрении. Определенно, мы должны указать на используемые структуры данных и как они осуществлены.

Давайте сначала предположим, что мы представляем граф G использование структуры списка смежности. Эта структура данных позволяет нам ступать через вершины, смежные с u во время шага релаксации, вовремя пропорционального их числу. Это все еще не улаживает все подробности для алгоритма, однако, поскольку мы должны сказать больше о том, как осуществить другую принципиальную структуру данных в алгоритме - приоритетная очередь Q.

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

Вернувшись, чтобы Закодировать Фрагмент 13.24, детали анализа продолжительности следующие:

• Во вставке всех вершин в Q с их начальным значением ключа можно выполнить

O (n регистрируют n), время повторными вставками, или в O (n) время, используя восходящую кучу

строительство (см. Раздел 8.3.6).

• При каждом повторении, в то время как петля, мы тратим O (регистрируют n), время, чтобы удалить вершину

u от Q и O (степень (v) регистрация n) время, чтобы выполнить процедуру релаксации

на инциденте краев на u.

• Полная продолжительность, в то время как петля

å (1 + степень (v)) logn,

v в G

который является O ((n + m), регистрируют n) Суждением 13.6. Обратите внимание на то, что, если мы хотим выразить продолжительность как функцию n только, тогда это - O (n2, регистрируют n) в худшем случае.

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

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

Предположим, что мы хотим соединить все компьютеры в новом офисном здании, используя наименьшее количество суммы кабеля. Мы можем смоделировать эту проблему, используя взвешенный граф G, чьи вершины представляют компьютеры, и чьи края представляют все возможные пары (u, v) компьютеров, где вес w ((v, u)) края (v, u) равен на сумму кабеля, должен был соединить компьютер v с компьютером u. Вместо того, чтобы вычислять дерево кратчайшего пути из некоторой особой вершины v, мы интересуемся вместо этого нахождением (свободного) дерева T, который содержит все вершины G и имеет минимальную общую массу по всем таким деревьям. Методы для нахождения такого дерева являются центром этой секции.

Проблемное определение

Учитывая взвешенный ненаправленный граф G, мы интересуемся нахождением дерева T, который содержит все вершины в G и минимизирует сумму

w (T) = å w ((v, u)).

(v, u) в T

Дерево, такое как это, которое содержит каждую вершину связанного графа G, как говорят, является деревом охвата, и проблема вычисления дерева охвата T с самой маленькой общей массой известна как минимальное дерево охвата (или ПО СТАНДАРТНОМУ ГОРНОМУ ВРЕМЕНИ) проблема.

Развитие эффективных алгоритмов для минимального дерева охвата prob-lem предшествует современному понятию самой информатики. В этой секции мы обсуждаем два классических алгоритма для решения проблемы ПО СТАНДАРТНОМУ ГОРНОМУ ВРЕМЕНИ. Эти алгоритмы - оба применения жадного метода, который, как был обсужден briefly в предыдущей секции, основан на выборе объектов присоединиться к растущей коллекции Итерой - tively выбор объекта, который минимизирует некоторую функцию стоимости. Первый алгоритм, который мы обсуждаем, является алгоритмом Краскэла, который «выращивает» ПО СТАНДАРТНОМУ ГОРНОМУ ВРЕМЕНИ в группах, рассматривая края в порядке их весов. Второй алгоритм, который мы обсуждаем, является Чопорным-Jarn'k ı

алгоритм, который выращивает ПО СТАНДАРТНОМУ ГОРНОМУ ВРЕМЕНИ от единственной вершины корня, очень таким же образом как алгоритм кратчайшего пути Дейкстры.

Как в Разделе 13.5.2, чтобы упростить описание алгоритмов, мы принимаем, в следующем, что входной граф G не направлен (то есть, все его края не направлены), и простой (то есть, у этого нет самопетель и никаких параллельных краев). Следовательно, мы обозначаем края G как неприказанные пары вершины (u, z).

Прежде чем мы обсудим детали этих алгоритмов, однако, давайте дадим решающий факт о минимальных деревьях охвата, который формирует основание алгоритмов.