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

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

Алгоритм Крускала (или алгоритм Краскала) — алгоритм построения минимального остовного дерева взвешенного связного неориентированного графа. Алгоритм впервые описан Джозефом Крускалом в 1956 году.

Содержание

Формулировка

Вначале текущее множество рёбер устанавливается пустым. Затем, пока это возможно, проводится следующая операция: из всех рёбер, добавление которых к уже имеющемуся множеству не вызовет появление в нём цикла, выбирается ребро минимального веса и добавляется к уже имеющемуся множеству. Когда таких рёбер больше нет, алгоритм завершён. Подграф данного графа, содержащий все его вершины и найденное множество рёбер, является его остовным деревом минимального веса.

Оценка

До начала работы алгоритма необходимо отсортировать рёбра по весу, это требует O(E × log(E)) времени. После чего компоненты связности удобно хранить в виде системы непересекающихся множеств. Все операции в таком случае займут O(E × α(E, V)), где α — функция, обратная к функции Аккермана. Поскольку для любых практических задач α(E, V) < 5, то можно принять её за константу, таким образом общее время работы алгоритма Крускала можно принять за O(E * log(E)).

Доказательство корректности алгоритма

Алгоритм Крускала действительно находит остовное дерево минимального веса, поскольку он является частным случаем алгоритма Радо — Эдмондса[1] для графического матроида, где независимые множества — ациклические множества рёбер.

Пример

Изображение Описание
Kruskal Algorithm 1.svg Ребра AD и CE имеют минимальный вес, равный 5. Произвольно выбирается ребро AD (выделено на рисунке).
Kruskal Algorithm 2.svg Теперь наименьший вес, равный 5, имеет ребро CE. Так добавление CE не образует цикла, то выбираем его в качестве второго ребра.
Kruskal Algorithm 3.svg Аналогично выбираем ребро DF, вес которого равен 6.
Kruskal Algorithm 4.svg Следующие ребра — AB и BE с весом 7. Произвольно выбирается ребро AB, выделенное на рисунке. Ребро BD выделено красным, так уже существует путь (зеленый) между B и D, поэтому, если бы это ребро было выбрано, то образовался бы цикл ABD.
Kruskal Algorithm 5.svg Аналогичным образом выбирается ребро BE, вес которого равен 7. На этом этапе красным выделено гораздо больше ребер: BC, потому что оно создаст цикл BCE, DE, потому что оно создаст цикл DEBA, и FE, потому что оно сформирует цикл FEBAD.
Kruskal Algorithm 6.svg Алгоритм завершается добавлением ребра EG с весом 9. Минимальное остовное дерево построено.

См. также

Примечания

  1. В.Е. Алексеев, В.А. Таланов, Графы и алгоритмы // Intuit, 2006 - ISBN 5-9556-0066-3. 14. Лекция: Жадные алгоритмы и матроиды. Теорема Радо-Эдмондса.

Литература

  • Joseph. B. Kruskal. On the Shortest Spanning Subtree of a Graph and the Traveling Salesman Problem. // Proc. AMS. 1956. Vol 7, No. 1. C. 48-50

Ссылки


Wikimedia Foundation. 2010.

Игры ⚽ Нужно сделать НИР?

Полезное


Смотреть что такое "Алгоритм Крускала" в других словарях:

  • Список эпизодов сериала «4исла» — «4исла» (англ. Numb3rs)  детективный телевизионный сериал, созданный Николасом Фалаччи и Шерил Хьютон. Премьера телесериала состоялась 23 января 2005 года, 18 мая 2010 года CBS закрыл сериал …   Википедия

  • Минимальное остовное дерево — (или минимальное покрывающее дерево) в связанном, взвешенном, неориентированном графе  это остовное дерево этого графа, имеющее минимальный возможный вес, где под весом дерева понимается сумма весов входящих в него рёбер. Содержание 1 Пример …   Википедия

  • Разработка алгоритмов — Разработка алгоритма  специфический метод для создания математического способа решения проблем. Прикладной разработкой алгоритма является инжиниринг алгоритма. Разработка алгоритма  это отождествление и объединение во множество решений… …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»