Maison  >  Article  >  développement back-end  >  Comment écrire l'algorithme de Prim en Python ?

Comment écrire l'algorithme de Prim en Python ?

WBOY
WBOYoriginal
2023-09-19 18:09:16666parcourir

Comment écrire lalgorithme de Prim en Python ?

Comment écrire l'algorithme de Prim en Python ?

L'algorithme de Prim est un algorithme classique pour résoudre le problème de l'arbre couvrant minimum. Il peut trouver l'arbre couvrant minimum d'un graphe connecté non orienté. Cet article explique comment écrire l'algorithme de Prim à l'aide de Python, avec des exemples de code spécifiques.

Tout d'abord, nous devons comprendre les principes de base de l'algorithme de Prim. L'algorithme part d'un nœud de départ et étend progressivement les limites de l'arborescence jusqu'à ce que tous les nœuds du graphique soient couverts. Plus précisément, l'algorithme de Prim sélectionne à chaque fois un nœud le plus proche de l'arbre couvrant et l'ajoute à l'arbre couvrant, puis ajoute les arêtes reliant ce nœud aux nœuds de l'arbre couvrant à l'ensemble d'arêtes candidat. Ensuite, l’arête ayant le plus petit poids est sélectionnée parmi l’ensemble des arêtes candidates, et ce processus est répété jusqu’à ce que l’arbre couvrant contienne tous les nœuds.

Ce qui suit est un exemple de code d'utilisation de Python pour implémenter l'algorithme de Prim :

import sys

class Graph:
    def __init__(self, vertices):
        self.V = vertices
        self.graph = [[0 for _ in range(vertices)] for _ in range(vertices)]

    def printMST(self, parent):
        print("Edge     Weight")
        for i in range(1, self.V):
            print(parent[i], "-", i, "    ", self.graph[i][parent[i]])

    def minKey(self, key, mstSet):
        min = sys.maxsize
        min_index = None

        for v in range(self.V):
            if key[v] < min and not mstSet[v]:
                min = key[v]
                min_index = v

        return min_index

    def primMST(self):
        key = [sys.maxsize] * self.V
        parent = [None] * self.V
        key[0] = 0
        mstSet = [False] * self.V

        parent[0] = -1

        for _ in range(self.V):
            u = self.minKey(key, mstSet)
            mstSet[u] = True

            for v in range(self.V):
                if self.graph[u][v] > 0 and not mstSet[v] and key[v] > self.graph[u][v]:
                    key[v] = self.graph[u][v]
                    parent[v] = u

        self.printMST(parent)

# 测试示例
g = Graph(5)
g.graph = [[0, 2, 0, 6, 0],
           [2, 0, 3, 8, 5],
           [0, 3, 0, 0, 7],
           [6, 8, 0, 0, 9],
           [0, 5, 7, 9, 0]]

g.primMST()

Dans le code ci-dessus, une classe Graph est d'abord définie, qui contient les opérations de base du graphe. Dans la méthode primMST, la méthode minKey est utilisée pour sélectionner le nœud correspondant à l'arête avec le plus petit poids dans l'ensemble d'arêtes candidats, puis met à jour les tableaux de clés et parents.

Dans l'exemple de test, nous avons créé un graphe contenant 5 nœuds et donné sa représentation matricielle d'adjacence. La sortie du code correspond aux bords de l'arbre couvrant minimum et à leurs poids.

En bref, la simplicité et la lisibilité de Python rendent relativement facile la mise en œuvre de l'algorithme de Prim. En comprenant les principes de base de l'algorithme de Prim et en utilisant les exemples de code ci-dessus, vous pouvez facilement écrire et exécuter une implémentation de l'algorithme de Prim. J'espère que cet article vous aidera à apprendre l'algorithme de Prim !

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:
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