Python을 사용하여 Kruskal 알고리즘을 구현하는 방법은 무엇입니까?
소개:
Kruskal의 알고리즘은 최소 신장 트리를 해결하기 위한 고전적인 알고리즘으로, 주어진 가중치 연결 그래프에서 최소 총 가중치를 갖는 신장 트리를 찾을 수 있습니다. 이 기사에서는 Python을 사용하여 Kruskal의 알고리즘을 구현하는 방법을 소개하고 자세한 코드 예제를 제공합니다.
- 알고리즘 소개:
Kruskal 알고리즘의 기본 아이디어는 연결된 그래프의 모든 가장자리를 가중치에 따라 정렬한 다음, 선택한 가장자리가 형성되지 않을 경우 작은 것부터 큰 것까지 가장자리를 선택하는 것입니다. 한 사이클이면 최소 스패닝 트리에 참여하고 방문한 것으로 표시됩니다. 최소 스패닝 트리의 간선 수가 그래프의 정점 수에서 1을 뺀 값과 같아질 때까지입니다. - 구현 단계:
(1) 그래프의 클래스를 정의하고 그래프의 꼭지점 및 모서리 수를 초기화합니다.
(2) 각 Edge의 클래스를 정의하고 Edge의 시작점, 끝점 및 가중치를 초기화합니다.
(3) 루트 노드 찾기 및 집합 병합을 포함하여 집합을 구현하고 초기화하는 함수를 작성합니다.
(4) 모서리 정렬, 모서리를 하나씩 선택하여 순환을 형성하는지 확인, 최소 스패닝 트리에 모서리 추가, 최소 스패닝 트리의 총 가중치 계산 등 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()
- 결과 분석:
위 코드는 6개의 꼭지점을 포함하는 가중치 무방향 그래프를 구성하고 Kruskal 알고리즘을 사용하여 최소 스패닝 트리를 푸는 일반적인 예입니다. 프로그램은 최소 스패닝 트리의 가장자리와 최소 스패닝 트리의 총 가중치를 인쇄합니다.
결론:
Kruskal의 알고리즘은 연결된 그래프의 최소 스패닝 트리를 해결하는 효율적인 방법으로 간선을 정렬하고 집합을 병합하여 최소 총 가중치를 갖는 스패닝 트리를 얻을 수 있습니다. Python을 사용하여 Kruskal의 알고리즘을 구현하면 알고리즘의 원리와 프로세스를 더 잘 이해하고 실제 문제에 쉽게 적용할 수 있습니다.
위 내용은 Python을 사용하여 Kruskal 알고리즘을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

Python은 데이터 과학, 웹 개발 및 자동화 작업에 적합한 반면 C는 시스템 프로그래밍, 게임 개발 및 임베디드 시스템에 적합합니다. Python은 단순성과 강력한 생태계로 유명하며 C는 고성능 및 기본 제어 기능으로 유명합니다.

2 시간 이내에 Python의 기본 프로그래밍 개념과 기술을 배울 수 있습니다. 1. 변수 및 데이터 유형을 배우기, 2. 마스터 제어 흐름 (조건부 명세서 및 루프), 3. 기능의 정의 및 사용을 이해하십시오. 4. 간단한 예제 및 코드 스 니펫을 통해 Python 프로그래밍을 신속하게 시작하십시오.

Python은 웹 개발, 데이터 과학, 기계 학습, 자동화 및 스크립팅 분야에서 널리 사용됩니다. 1) 웹 개발에서 Django 및 Flask 프레임 워크는 개발 프로세스를 단순화합니다. 2) 데이터 과학 및 기계 학습 분야에서 Numpy, Pandas, Scikit-Learn 및 Tensorflow 라이브러리는 강력한 지원을 제공합니다. 3) 자동화 및 스크립팅 측면에서 Python은 자동화 된 테스트 및 시스템 관리와 같은 작업에 적합합니다.

2 시간 이내에 파이썬의 기본 사항을 배울 수 있습니다. 1. 변수 및 데이터 유형을 배우십시오. 이를 통해 간단한 파이썬 프로그램 작성을 시작하는 데 도움이됩니다.

10 시간 이내에 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법은 무엇입니까? 컴퓨터 초보자에게 프로그래밍 지식을 가르치는 데 10 시간 밖에 걸리지 않는다면 무엇을 가르치기로 선택 하시겠습니까?

Fiddlerevery Where를 사용할 때 Man-in-the-Middle Reading에 Fiddlereverywhere를 사용할 때 감지되는 방법 ...

Python 3.6에 피클 파일로드 3.6 환경 보고서 오류 : modulenotfounderror : nomodulename ...

경치 좋은 스팟 댓글 분석에서 Jieba Word 세분화 문제를 해결하는 방법은 무엇입니까? 경치가 좋은 스팟 댓글 및 분석을 수행 할 때 종종 Jieba Word 세분화 도구를 사용하여 텍스트를 처리합니다 ...


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

WebStorm Mac 버전
유용한 JavaScript 개발 도구

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기
