Maison développement back-end Tutoriel Python Comment implémenter l'algorithme de Kruskal en utilisant Python ?

Comment implémenter l'algorithme de Kruskal en utilisant Python ?

Sep 19, 2023 pm 03:30 PM
python实现 最小生成树 L'algorithme de Kruskal

Comment implémenter lalgorithme de Kruskal en utilisant Python ?

Comment implémenter l'algorithme de Kruskal en utilisant Python ?

Introduction : 
L'algorithme de Kruskal est un algorithme classique pour résoudre l'arbre couvrant minimum, qui peut trouver l'arbre couvrant avec le poids total minimum dans un graphe connecté pondéré donné. Cet article présentera comment implémenter l'algorithme de Kruskal à l'aide de Python et fournira des exemples de code détaillés.

  1. Introduction à l'algorithme :
    L'idée de base de l'algorithme de Kruskal est de trier toutes les arêtes du graphe connecté en fonction de leurs poids, puis de sélectionner les arêtes de petite à grande si l'arête actuelle sélectionnée ne se forme pas. un cycle, alors ce sera Rejoindre l'arbre couvrant minimum et le marquer comme visité. Jusqu'à ce que le nombre d'arêtes dans l'arbre couvrant minimum soit égal au nombre de sommets dans le graphe moins un.
  2. Étapes de mise en œuvre :
    (1) Définir la classe du graphe et initialiser le nombre de sommets et d'arêtes du graphe.
    (2) Définissez la classe de chaque arête et initialisez le point de départ, le point final et le poids de l'arête.
    (3) Écrivez une fonction pour implémenter et initialiser l'ensemble, y compris la recherche du nœud racine et la fusion des ensembles.
    (4) Écrivez la fonction principale pour implémenter l'algorithme de Kruskal, y compris le tri des arêtes, la sélection des arêtes une par une pour déterminer si elles forment un cycle, l'ajout d'arêtes à l'arbre couvrant minimum et le calcul du poids total de l'arbre couvrant minimum.
  3. Exemple de code :
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()
Copier après la connexion
  1. Analyse des résultats :
    Le code ci-dessus est un exemple typique, construisant un graphe non orienté pondéré contenant 6 sommets et utilisant l'algorithme de Kruskal pour résoudre son arbre couvrant minimum. Le programme imprime les bords de l'arbre couvrant minimum et le poids total de l'arbre couvrant minimum.

Conclusion : 
L'algorithme de Kruskal est une méthode efficace pour résoudre l'arbre couvrant minimum d'un graphe connecté. En triant les arêtes et en fusionnant les ensembles, un arbre couvrant avec le poids total minimum peut être obtenu. Utiliser Python pour implémenter l'algorithme de Kruskal peut nous aider à mieux comprendre les principes et les processus de l'algorithme et à l'appliquer facilement à des problèmes pratiques.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment utiliser l'algorithme de Prim en C++ Comment utiliser l'algorithme de Prim en C++ Sep 20, 2023 pm 12:31 PM

Titre : Utilisation de l'algorithme Prim et exemples de code en C++ Introduction : L'algorithme Prim est un algorithme d'arbre couvrant minimum couramment utilisé, principalement utilisé pour résoudre le problème de l'arbre couvrant minimum dans la théorie des graphes. En C++, l'algorithme de Prim peut être utilisé efficacement grâce à des structures de données raisonnables et à la mise en œuvre de l'algorithme. Cet article explique comment utiliser l'algorithme de Prim en C++ et fournit des exemples de code spécifiques. 1. Introduction à l'algorithme Prim L'algorithme Prim est un algorithme glouton. Il part d'un sommet et étend progressivement l'ensemble de sommets de l'arbre couvrant minimum jusqu'à ce qu'il contienne.

Comment implémenter l'algorithme de codage de Huffman en utilisant Python ? Comment implémenter l'algorithme de codage de Huffman en utilisant Python ? Sep 20, 2023 am 10:49 AM

Comment implémenter l'algorithme de codage de Huffman en utilisant Python ? Résumé : Le codage de Huffman est un algorithme classique de compression de données qui génère des codes uniques basés sur la fréquence des occurrences de caractères, permettant ainsi une compression et un stockage efficaces des données. Cet article expliquera comment utiliser Python pour implémenter l'algorithme de codage de Huffman et fournira des exemples de code spécifiques. Comprendre l'idée du codage Huffman. L'idée principale du codage Huffman est d'utiliser des codes légèrement plus courts pour les caractères qui apparaissent plus fréquemment et d'utiliser des codes légèrement plus longs pour les caractères qui apparaissent moins fréquemment, afin de réaliser le codage.

Comment implémenter la fonction de téléchargement de carte hors ligne dans l'API Baidu Map en Python Comment implémenter la fonction de téléchargement de carte hors ligne dans l'API Baidu Map en Python Jul 29, 2023 pm 02:34 PM

Méthode Python pour implémenter la fonction de téléchargement de cartes hors ligne dans l'API Baidu Map Avec le développement rapide de l'Internet mobile, la demande de fonction de téléchargement de cartes hors ligne devient de plus en plus urgente. La fonction de téléchargement de cartes hors ligne permet aux utilisateurs de continuer à utiliser la navigation cartographique et d'autres fonctions sans connexion Internet, offrant ainsi aux utilisateurs une meilleure expérience utilisateur. Cet article explique comment utiliser Python pour implémenter la fonction de téléchargement de carte hors ligne dans l'API Baidu Map. L'API Baidu Map fournit un ensemble complet d'interfaces ouvertes, y compris des fonctions de téléchargement de cartes hors ligne. utilisé

Utilisez Python pour implémenter l'accueil de l'interface Baidu AI afin de rendre votre programme plus intelligent et plus puissant Utilisez Python pour implémenter l'accueil de l'interface Baidu AI afin de rendre votre programme plus intelligent et plus puissant Aug 13, 2023 am 09:29 AM

Utilisez Python pour implémenter l'interface d'accueil Baidu AI afin de rendre votre programme plus intelligent et plus puissant. Avec le développement continu de la technologie d'intelligence artificielle, de plus en plus de développeurs ont commencé à mettre en œuvre des fonctions intelligentes pour améliorer l'intelligence de leurs programmes. L'interface Baidu AI est un outil puissant qui peut nous aider à mettre en œuvre plusieurs fonctions intelligentes telles que la reconnaissance vocale, la reconnaissance d'images et le traitement du langage naturel. Cet article vous montrera comment utiliser Python pour vous connecter à l'interface Baidu AI afin de rendre votre programme plus intelligent et plus puissant. Tout d'abord, nous devons accéder à Baidu AI Open Platform (h

Algorithme Boruvka en C++ pour un arbre couvrant minimum Algorithme Boruvka en C++ pour un arbre couvrant minimum Aug 27, 2023 pm 02:53 PM

En théorie des graphes, trouver l'arbre couvrant minimum (MST) d'un graphe pondéré connecté est un problème courant. MST est un sous-ensemble d'arêtes de graphique qui relie tous les sommets et minimise le poids total des arêtes. Un algorithme efficace pour résoudre ce problème est l’algorithme de Boruvka. Syntaxe structEdge{intsrc,dest,weight;};//Definethestructuretorepresentasubsetforunion-findstructSubset{intparent,rank;};Algorithme Maintenant, décrivons les étapes impliquées dans la recherche de l'arbre couvrant minimum dans l'algorithme de Boruvka - Initialiser le MST en tant qu'ensemble vide . pour chaque sommet

Python implémente des méthodes et le partage de cas pour tester automatiquement les pages Web à l'aide d'applications d'acquisition de navigateur sans tête Python implémente des méthodes et le partage de cas pour tester automatiquement les pages Web à l'aide d'applications d'acquisition de navigateur sans tête Aug 08, 2023 am 08:29 AM

Présentation des méthodes Python et du partage de cas pour les tests automatisés de pages Web à l'aide d'applications de collecte de navigateurs sans interface : à l'ère d'Internet d'aujourd'hui, les tests automatisés de pages Web sont devenus l'un des moyens importants pour améliorer la qualité et l'efficacité des logiciels. En tant que langage de programmation de haut niveau, Python dispose d'une multitude de bibliothèques et d'outils tiers, ce qui facilite et accélère l'utilisation de Python pour les tests automatisés de pages Web. Cet article expliquera comment utiliser un navigateur sans tête pour collecter des applications et mettre en œuvre des tests automatisés de pages Web, et fournira des exemples de code pertinents. 1. Qu'est-ce que la navigation sans tête ?

Python implémente l'analyse des fonctions de clic et de défilement de simulation de page pour les applications de collecte de navigateurs sans tête Python implémente l'analyse des fonctions de clic et de défilement de simulation de page pour les applications de collecte de navigateurs sans tête Aug 09, 2023 pm 05:13 PM

Python implémente l'analyse des fonctions de clic et de défilement de simulation de page pour les applications de collecte de navigateurs sans tête Lors de la collecte de données réseau, il est souvent nécessaire de simuler les opérations de l'utilisateur, telles que le clic sur les boutons, le défilement des listes déroulantes, etc. Un moyen courant de réaliser ces opérations consiste à utiliser un navigateur sans tête. Un navigateur sans tête est en fait un navigateur sans interface utilisateur qui simule les opérations des utilisateurs via la programmation. Le langage Python fournit de nombreuses bibliothèques pour implémenter des opérations de navigateur sans tête, dont la plus couramment utilisée est la bibliothèque Selenium. Sélène

Comment utiliser un algorithme glouton pour obtenir la solution optimale du problème de l'arbre couvrant minimum en PHP ? Comment utiliser un algorithme glouton pour obtenir la solution optimale du problème de l'arbre couvrant minimum en PHP ? Sep 19, 2023 pm 06:33 PM

Comment utiliser un algorithme glouton pour obtenir la solution optimale du problème de l'arbre couvrant minimum en PHP ? Le problème de l'arbre couvrant minimum (MinimumSpanningTree) consiste à trouver un sous-arbre dans un graphe non orienté connecté tel que ce sous-arbre contienne tous les sommets du graphe et que la somme des poids de toutes les arêtes soit la plus petite. L'algorithme glouton est l'une des méthodes courantes pour résoudre ce problème. Il trouve progressivement la solution optimale globale en sélectionnant à chaque fois la solution optimale actuelle. Tout d’abord, nous devons définir une classe de graphe pour stocker la structure du graphe et les poids des arêtes. Ce qui suit est un exemple de

See all articles