ホームページ >バックエンド開発 >Python チュートリアル >Python を使用してクラスカルのアルゴリズムを実装するにはどうすればよいですか?
Python を使用して Kruskal のアルゴリズムを実装するにはどうすればよいですか?
はじめに:
Kruskal のアルゴリズムは、最小スパニング ツリーを解くための古典的なアルゴリズムであり、指定された重み付き接続グラフ内で合計重みが最小のスパニング ツリーを見つけることができます。この記事では、Python を使用して Kruskal のアルゴリズムを実装する方法を紹介し、詳細なコード例を示します。
class Graph: def __init__(self, vertices): self.V = vertices # 顶点数 self.graph = [] # 添加边 def add_edge(self, u, v, weight): self.graph.append([u, v, weight]) # 查找根节点 def find(self, parent, i): if parent[i] == i: return i return self.find(parent, parent[i]) # 合并集合 def union(self, parent, rank, x, y): root_x = self.find(parent, x) root_y = self.find(parent, y) if rank[root_x] < rank[root_y]: parent[root_x] = root_y elif rank[root_x] > rank[root_y]: parent[root_y] = root_x else: parent[root_y] = root_x rank[root_x] += 1 # 克鲁斯卡尔算法 def kruskal_algorithm(self): result = [] i = 0 e = 0 self.graph = sorted(self.graph, key=lambda item: item[2]) # 按照权值排序 parent = [] rank = [] for node in range(self.V): parent.append(node) rank.append(0) while e < self.V - 1: u, v, weight = self.graph[i] i += 1 x = self.find(parent, u) y = self.find(parent, v) if x != y: e += 1 result.append([u, v, weight]) self.union(parent, rank, x, y) # 打印最小生成树 print("最小生成树:") for u, v, weight in result: print(f"{u} -- {v} {weight}") # 计算最小生成树的总权值 total_weight = sum(weight for u, v, weight in result) print("最小生成树的总权值:", total_weight) if __name__ == '__main__': g = Graph(6) g.add_edge(0, 1, 4) g.add_edge(0, 2, 3) g.add_edge(1, 2, 1) g.add_edge(1, 3, 2) g.add_edge(2, 3, 4) g.add_edge(2, 4, 3) g.add_edge(3, 4, 2) g.add_edge(3, 5, 1) g.add_edge(4, 5, 6) g.kruskal_algorithm()
結論:
Kruskal のアルゴリズムは、接続されたグラフの最小スパニング ツリーを解くための効率的な方法です。エッジをソートし、セットをマージすることで、最小値をもつ最小スパニング ツリーを取得できます。重みの合計スパニング ツリー。 Python を使用してクラスカルのアルゴリズムを実装すると、アルゴリズムの原理とプロセスをより深く理解し、実際の問題に簡単に適用できます。
以上がPython を使用してクラスカルのアルゴリズムを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。