Мы обсудили следующие темы о минимальном остовном дереве.
Приложения задачи минимального остовного дерева
Алгоритм минимального связующего дерева Крускала
Минимальный алгоритм связующего дерева Прима
В этом посте обсуждается алгоритм Борувки. Как и у Прима и Крускала, алгоритм Борувки также является алгоритмом Жадности. Ниже приведен полный алгоритм.
1) Input is a connected, weighted and directed graph. 2) Initialize all vertices as individual components (or sets). 3) Initialize MST as empty. 4) While there are more than one components, do following for each component. a) Find the closest weight edge that connects this component to any other component. b) Add this closest edge to MST if not already added. 5) Return MST.
Ниже приведена идея вышеупомянутого алгоритма (идея такая же, как и у алгоритма MST Прима ).
Связующее дерево означает, что все вершины должны быть связаны. Таким образом, два непересекающихся подмножества (обсужденных выше) вершин должны быть соединены, чтобы составить остовное дерево. И они должны быть связаны с минимальным краем веса, чтобы сделать его минимальным остовным деревом.
Давайте разберемся с алгоритмом на примере ниже.
Изначально MST пуст. Каждая вершина является отдельным компонентом, как показано синим цветом на диаграмме ниже.
Для каждого компонента найдите самое дешевое преимущество, связывающее его с каким-либо другим компонентом.
Component Cheapest Edge that connects it to some other component {0} 0-1 {1} 0-1 {2} 2-8 {3} 2-3 {4} 3-4 {5} 5-6 {6} 6-7 {7} 6-7 {8} 2-8
Самые дешевые края выделены зеленым цветом. Теперь MST становится {0-1, 2-8, 2-3, 3-4, 5-6, 6-7}.
После вышеприведенного шага используются компоненты {{0,1}, {2,3,4,8}, {5,6,7}}. Компоненты обведены синим цветом.
Мы снова повторяем шаг, то есть для каждого компонента находим самое дешевое ребро, которое связывает его с каким-то другим компонентом.
Component Cheapest Edge that connects it to some other component {0,1} 1-2 (or 0-7) {2,3,4,8} 2-5 {5,6,7} 2-5
Самые дешевые края выделены зеленым цветом. Теперь MST становится {0-1, 2-8, 2-3, 3-4, 5-6, 6-7, 1-2, 2-5}
На этом этапе есть только один компонент {0, 1, 2, 3, 4, 5, 6, 7, 8}, который имеет все ребра. Поскольку остался только один компонент, мы останавливаемся и возвращаем MST.
Реализация:
Ниже приведена реализация вышеуказанного алгоритма. Входной граф представлен в виде набора ребер, а структура данных union-find используется для отслеживания компонентов.
|
питон
|
Выход:
Edge 0-3 included in MST Edge 0-1 included in MST Edge 2-3 included in MST Weight of MST is 19
Интересные факты об алгоритме Борувки:
1) Сложность времени алгоритма Борувки равна O (E log V), что совпадает с алгоритмами Крускала и Прима.
2) Алгоритм Борувки используется в качестве шага в более быстром рандомизированном алгоритме, который работает за линейное время O (E) .
3) Алгоритм Борувки — самый старый алгоритм минимального связующего дерева, который был открыт Борувкой в 1926 году, задолго до того, как компьютеры появились. Алгоритм был опубликован как метод построения эффективной электрической сети.
Упражнение:
Приведенный выше код предполагает, что входной граф подключен, и он не работает, если задан отключенный граф. Расширьте приведенный выше алгоритм так, чтобы он работал и для несвязного графа и создавал лес.
Ссылки:
http://en.wikipedia.org/wiki/Bor%C5%AFvka%27s_algorithm
Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме
Рекомендуемые посты:
- Жадный алгоритм для египетской фракции
- Раскраска графиков | Набор 2 (Жадный алгоритм)
- K Центры Проблема | Набор 1 (жадный приближенный алгоритм)
- Задайте проблему с крышкой | Набор 1 (жадный приближенный алгоритм)
- Жадный алгоритм, чтобы найти минимальное количество монет
- Алгоритм кратчайшего пути Дейкстры | Жадный Алго-7
- Алгоритм Дейкстры для представления списка смежности | Жадный Алго-8
- Алгоритм минимального остовного дерева Крускала | Жадный Алго-2
- Корректность жадных алгоритмов
- Лучшие 20 вопросов о жадных алгоритмах
- Хаффман Кодирование | Жадный Алго-3
- Жадный подход против динамического программирования
- Задача выбора деятельности | Жадный Алго-1
- Монетная игра двух углов (Жадный подход)
- Prim's MST для представления списка смежности | Жадный Алго-6
0.00 (0%) 0 votes