백엔드 개발 파이썬 튜토리얼 Python을 사용하여 Kruskal 알고리즘을 구현하는 방법은 무엇입니까?

Python을 사용하여 Kruskal 알고리즘을 구현하는 방법은 무엇입니까?

Sep 19, 2023 pm 03:30 PM
파이썬 구현 최소 스패닝 트리 크루스칼의 알고리즘

Python을 사용하여 Kruskal 알고리즘을 구현하는 방법은 무엇입니까?

Python을 사용하여 Kruskal 알고리즘을 구현하는 방법은 무엇입니까?

소개:
Kruskal의 알고리즘은 최소 신장 트리를 해결하기 위한 고전적인 알고리즘으로, 주어진 가중치 연결 그래프에서 최소 총 가중치를 갖는 신장 트리를 찾을 수 있습니다. 이 기사에서는 Python을 사용하여 Kruskal의 알고리즘을 구현하는 방법을 소개하고 자세한 코드 예제를 제공합니다.

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

결론:
Kruskal의 알고리즘은 연결된 그래프의 최소 스패닝 트리를 해결하는 효율적인 방법으로 간선을 정렬하고 집합을 병합하여 최소 총 가중치를 갖는 스패닝 트리를 얻을 수 있습니다. Python을 사용하여 Kruskal의 알고리즘을 구현하면 알고리즘의 원리와 프로세스를 더 잘 이해하고 실제 문제에 쉽게 적용할 수 있습니다.

위 내용은 Python을 사용하여 Kruskal 알고리즘을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

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

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

C++에서 Prim의 알고리즘을 사용하는 방법 C++에서 Prim의 알고리즘을 사용하는 방법 Sep 20, 2023 pm 12:31 PM

제목: C++에서 Prim 알고리즘 및 코드 예제 사용 소개: Prim 알고리즘은 일반적으로 사용되는 최소 스패닝 트리 알고리즘으로, 주로 그래프 이론의 최소 스패닝 트리 문제를 해결하는 데 사용됩니다. C++에서는 합리적인 데이터 구조와 알고리즘 구현을 통해 Prim의 알고리즘을 효과적으로 사용할 수 있습니다. 이 기사에서는 C++에서 Prim의 알고리즘을 사용하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 1. Prim 알고리즘 소개 Prim 알고리즘은 정점에서 시작하여 최소 신장 트리의 정점 집합을 점차적으로 확장하는 그리디 알고리즘입니다.

Python을 사용하여 허프만 코딩 알고리즘을 구현하는 방법은 무엇입니까? Python을 사용하여 허프만 코딩 알고리즘을 구현하는 방법은 무엇입니까? Sep 20, 2023 am 10:49 AM

Python을 사용하여 허프만 코딩 알고리즘을 구현하는 방법은 무엇입니까? 개요: 허프만 코딩은 문자 발생 빈도에 따라 고유한 코드를 생성함으로써 데이터의 효율적인 압축 및 저장을 달성하는 고전적인 데이터 압축 알고리즘입니다. 이 기사에서는 Python을 사용하여 허프만 코딩 알고리즘을 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 허프만 코딩의 개념을 이해합니다. 허프만 코딩의 핵심 아이디어는 더 자주 나타나는 문자에는 약간 더 짧은 코드를 사용하고 덜 자주 나타나는 문자에는 약간 더 긴 코드를 사용하여 코딩을 달성하는 것입니다.

Python의 Baidu Map API에서 오프라인 지도 다운로드 기능을 구현하는 방법 Python의 Baidu Map API에서 오프라인 지도 다운로드 기능을 구현하는 방법 Jul 29, 2023 pm 02:34 PM

Baidu Map API에서 오프라인 지도 다운로드 기능을 구현하기 위한 Python 방식 모바일 인터넷의 급속한 발전으로 인해 오프라인 지도 다운로드 기능에 대한 수요가 점점 더 절실해지고 있습니다. 오프라인 지도 다운로드 기능을 통해 사용자는 인터넷에 연결하지 않고도 지도 탐색 및 기타 기능을 계속 사용할 수 있어 사용자에게 더 나은 사용자 경험을 제공합니다. 이 기사에서는 Python을 사용하여 Baidu Map API에서 오프라인 지도 다운로드 기능을 구현하는 방법을 소개합니다. Baidu Map API는 오프라인 지도 다운로드 기능을 포함한 완전한 개방형 인터페이스 세트를 제공합니다. 사용

Python을 사용하여 Baidu AI 인터페이스 도킹을 구현하여 프로그램을 더욱 스마트하고 강력하게 만드세요. Python을 사용하여 Baidu AI 인터페이스 도킹을 구현하여 프로그램을 더욱 스마트하고 강력하게 만드세요. Aug 13, 2023 am 09:29 AM

Python을 사용하여 Baidu AI 인터페이스 도킹을 구현하여 프로그램을 더욱 스마트하고 강력하게 만드세요. 인공 지능 기술의 지속적인 발전으로 점점 더 많은 개발자가 프로그램의 지능을 향상시키기 위해 지능형 기능을 구현하기 시작했습니다. Baidu AI 인터페이스는 음성 인식, 이미지 인식, 자연어 처리 등 다양한 지능형 기능을 구현하는 데 도움이 되는 강력한 도구입니다. 이 기사에서는 Python을 사용하여 Baidu AI 인터페이스에 연결하여 프로그램을 더 스마트하고 강력하게 만드는 방법을 보여줍니다. 먼저 Baidu AI Open Platform(h)으로 이동해야 합니다.

최소 신장 트리를 위한 C++의 Boruvka 알고리즘 최소 신장 트리를 위한 C++의 Boruvka 알고리즘 Aug 27, 2023 pm 02:53 PM

그래프 이론에서는 연결된 가중치 그래프의 최소 신장 트리(MST)를 찾는 것이 일반적인 문제입니다. MST는 모든 정점을 연결하고 총 간선 가중치를 최소화하는 그래프 간선의 하위 집합입니다. 이 문제를 해결하기 위한 효율적인 알고리즘은 Boruvka 알고리즘입니다. 구문 structEdge{intsrc,dest,weight;};//Union-findstructSubset{intparent,rank;};Algorithm에 대한 하위 집합을 나타내는 구조 정의 이제 Boruvka 알고리즘에서 최소 스패닝 트리를 찾는 단계를 간략하게 설명하겠습니다. − MST를 빈 집합으로 초기화합니다. . 각 정점마다

Python은 헤드리스 브라우저 컬렉션 ​​애플리케이션을 사용하여 웹 페이지의 자동화된 테스트를 위한 방법 및 사례 공유를 구현합니다. Python은 헤드리스 브라우저 컬렉션 ​​애플리케이션을 사용하여 웹 페이지의 자동화된 테스트를 위한 방법 및 사례 공유를 구현합니다. Aug 08, 2023 am 08:29 AM

헤드리스 브라우저 수집 애플리케이션을 사용하여 자동화된 웹 페이지 테스트를 위한 Python 방법 및 사례 공유 개요: 오늘날 인터넷 시대에 웹 페이지 자동화 테스트는 소프트웨어 품질과 효율성을 향상시키는 중요한 수단 중 하나가 되었습니다. 고급 프로그래밍 언어인 Python에는 풍부한 타사 라이브러리와 도구가 있으므로 웹 페이지의 자동화된 테스트에 Python을 쉽고 빠르게 사용할 수 있습니다. 이 기사에서는 헤드리스 브라우저를 사용하여 애플리케이션을 수집하고 웹 페이지의 자동화된 테스트를 구현하는 방법을 소개하고 관련 코드 예제를 제공합니다. 1. 헤드리스 브라우징이란 무엇입니까?

Python은 헤드리스 브라우저 컬렉션 ​​애플리케이션을 위한 페이지 시뮬레이션 클릭 및 스크롤 기능 분석을 구현합니다. Python은 헤드리스 브라우저 컬렉션 ​​애플리케이션을 위한 페이지 시뮬레이션 클릭 및 스크롤 기능 분석을 구현합니다. Aug 09, 2023 pm 05:13 PM

Python은 헤드리스 브라우저 수집 애플리케이션을 위한 페이지 시뮬레이션 클릭 및 스크롤 기능 분석을 구현합니다. 네트워크 데이터를 수집할 때 버튼 클릭, 드롭다운 스크롤 등과 같은 사용자 작업을 시뮬레이션해야 하는 경우가 많습니다. 이러한 작업을 수행하는 일반적인 방법은 헤드리스 브라우저를 사용하는 것입니다. 헤드리스 브라우저는 실제로 프로그래밍을 통해 사용자 작업을 시뮬레이션하는 사용자 인터페이스가 없는 브라우저입니다. Python 언어는 헤드리스 브라우저 작업을 구현하기 위한 많은 라이브러리를 제공하며, 그 중 가장 일반적으로 사용되는 것은 Selenium 라이브러리입니다. 셀렌

PHP에서 최소 스패닝 트리 문제에 대한 최적의 솔루션을 얻기 위해 그리디 알고리즘을 사용하는 방법은 무엇입니까? PHP에서 최소 스패닝 트리 문제에 대한 최적의 솔루션을 얻기 위해 그리디 알고리즘을 사용하는 방법은 무엇입니까? Sep 19, 2023 pm 06:33 PM

PHP에서 최소 스패닝 트리 문제에 대한 최적의 솔루션을 얻기 위해 그리디 알고리즘을 사용하는 방법은 무엇입니까? 최소 신장 트리(MinimumSpanningTree) 문제는 연결된 무방향 그래프에서 이 하위 트리가 그래프의 모든 정점을 포함하고 모든 간선의 가중치 합이 가장 작은 하위 트리를 찾는 것입니다. 그리디 알고리즘(Greedy Algorithm)은 이 문제를 해결하기 위한 일반적인 방법 중 하나이며, 매번 현재의 최적해를 선택하여 점진적으로 전역 최적해를 찾는다. 먼저 그래프의 구조와 간선의 가중치를 저장하는 그래프 클래스를 정의해야 합니다. 다음은 그 예입니다.

See all articles