Автор оригинала: Team Python Pool.
Алгоритм Крускала: Реализация в Python
Привет, кодеры!! В этой статье мы будем копаться в алгоритме Крускала и узнаем, как реализовать его на Python. Давайте сначала разберемся, что это значит. Этот алгоритм используется для создания href=”https://en.wikipedia.org/wiki/Minimum_spanning_tree”>минимальное связующее дерево из взвешенного графа. Теперь мы подробно рассмотрим эту тему. href=”https://en.wikipedia.org/wiki/Minimum_spanning_tree”>минимальное связующее дерево из взвешенного графа. Теперь мы подробно рассмотрим эту тему.
Алгоритм Крускала для минимального остовного дерева:
Алгоритм Крускала реализован для создания MST из неориентированного, взвешенного и связного графа. Ребра сортируются по возрастанию href=”https://en.wikipedia.org/wiki/Higher-order_programming”>упорядочить веса и добавлять один за другим, пока все вершины не будут включены в него. Это Жадный алгоритм, поскольку ребра выбираются в порядке возрастания весов. В этом алгоритме цикл не создается. href=”https://en.wikipedia.org/wiki/Higher-order_programming”>упорядочить веса и добавлять один за другим, пока все вершины не будут включены в него. Это Жадный алгоритм, поскольку ребра выбираются в порядке возрастания весов. В этом алгоритме цикл не создается.
- Сначала мы отсортируем ребра в порядке возрастания их веса.
- После этого выберите край, имеющий минимальный вес, и добавьте его к САМОМУ БОЛЬШОМУ. Если ребро создает цикл, мы отвергаем его.
- Повторите описанные выше шаги, пока мы не покроем все вершины.
Иллюстрация алгоритма Крускала:
Возьмем в качестве примера следующий график:
Ход: 0
Теперь ребра в порядке возрастания их весов равны:
- 0-2: 5
- 3-4: 7
- 0-1: 8
- 1-2: 9
- 2-4: 10
- 1-3: 11
Теперь мы выберем минимальное взвешенное ребро, то есть 0-2, и добавим его в MST:
Ход: 1
Следующее ребро, которое мы добавим к нашему MST, – это ребро 3-4:
Ход: 2
Теперь мы добавим ребро 0-1:
Ход: 3
Теперь у нас есть ребро 1-2 далее, однако, мы добавим это ребро, после чего будет создан цикл. В результате это ребро будет отвергнуто.
После добавления ребра 2-4, MST будет завершен, так как все вершины теперь включены.
Минимальное Связующее Дерево
Реализация алгоритма Крускала в Python:
class Graph: def __init__(self, vertex): self.graph = [] def add_edge(self, u, v, w): self.graph.append([u, v, w]) def search(self, parent, i): if parent[i]: return i return self.search(parent, parent[i]) def apply_union(self, parent, rank, x, y): .search(parent, x) .search(parent, y) if rank[xroot] < rank[yroot]: elif rank[xroot] > rank[yroot]: else: rank[xroot] def kruskal(self): result = [] i,, 0 (self.graph, item: item[2]) parent = [] rank = [] for node in range(self.V): parent.append(node) rank.append(0) while e < self.V - 1: u, v,.graph[i] + 1 .search(parent, u) .search(parent, v) if x: + 1 result.append([u, v, w]) self.apply_union(parent, rank, x, y) for u, v, weight in result: print("Edge:",u,) print("-",weight) (5) g.add_edge(0, 1, 8) g.add_edge(0, 2, 5) g.add_edge(1, 2, 9) g.add_edge(1, 3, 11) g.add_edge(2, 3, 15) g.add_edge(2, 4, 10) g.add_edge(3, 4, 7) g.kruskal()
Выход:
Выход
Временная сложность:
Временная сложность Алгоритма Крускала такова: O(E log V)
Преимущества алгоритма Крускала:
- Это легко реализовать
- Он обеспечивает хороший контроль над результирующим MST
Применение алгоритма Крускала:
- Используется для изготовления схемы электропроводки
- Используется для подключения к локальной сети
- Сеть труб для питьевой воды или природного газа.
- Однозвенный Кластер.
Надо Читать
- Понимание Python Bubble Sort с примерами
- Топ-10 алгоритмов для науки о данных
- Реализация Ханойской башни на Python
- 10 Алгоритмов машинного обучения для начинающих
- Сортировка по ячейкам в Python С алгоритмом и фрагментом кода
Вывод:
Все дело в алгоритме Крускала. Мы подробно изучили алгоритм, а также его реализацию на python. МЫ также увидели его преимущества и различные области применения в повседневных нуждах.
Однако, если у вас есть какие-либо сомнения или вопросы, дайте мне знать в разделе комментариев ниже. Я постараюсь помочь вам как можно скорее.
Счастливого Пифонирования!