Comparaison des algorithmes de fermeture transitive : algorithme ascendant vs algorithme descendant
Introduction :
L'algorithme de fermeture transitive est un algorithme couramment utilisé en théorie des graphes, que l'on retrouve dans les graphes orientés ou non. Fermeture transitive des graphes . Dans cet article, nous comparerons deux méthodes d'implémentation courantes de l'algorithme de fermeture transitive : l'algorithme ascendant et l'algorithme descendant, et donnerons des exemples de code spécifiques.
1. Algorithme bottom-up :
L'algorithme bottom-up est une méthode d'implémentation de l'algorithme de fermeture transitive. Il construit la fermeture transitive du graphe en calculant tous les chemins possibles dans le graphe. Les étapes de l'algorithme sont les suivantes :
Ce qui suit est un exemple de code spécifique de l'algorithme ascendant, prenant la matrice de contiguïté Graph et la matrice de fermeture transitive TransitiveClosure en entrée :
def transitive_closure(Graph, TransitiveClosure): num_vertices = len(Graph) for v in range(num_vertices): TransitiveClosure[v][v] = 1 for u in range(num_vertices): for v in range(num_vertices): if Graph[u][v]: TransitiveClosure[u][v] = 1 for w in range(num_vertices): for u in range(num_vertices): for v in range(num_vertices): if TransitiveClosure[u][w] and TransitiveClosure[w][v]: TransitiveClosure[u][v] = 1 return TransitiveClosure
2. Algorithme descendant :
L'algorithme descendant est également un algorithme de fermeture transitive Une méthode d'implémentation consiste à construire la fermeture transitive du graphe en calculant récursivement l'accessibilité de chaque paire de sommets. Les étapes de l'algorithme sont les suivantes :
Ce qui suit est un exemple de code spécifique de l'algorithme descendant, prenant la matrice de contiguïté Graph et la matrice de fermeture transitive TransitiveClosure en entrée :
def transitive_closure(Graph, TransitiveClosure): num_vertices = len(Graph) for u in range(num_vertices): for v in range(num_vertices): if Graph[u][v]: TransitiveClosure[u][v] = 1 for w in range(num_vertices): for u in range(num_vertices): for v in range(num_vertices): if TransitiveClosure[u][w] and TransitiveClosure[w][v]: TransitiveClosure[u][v] = 1 return TransitiveClosure
3. Analyse comparative :
Conclusion :
Les deux méthodes de mise en œuvre de l'algorithme de fermeture transitive, l'algorithme ascendant et l'algorithme descendant, sont fondamentalement les mêmes en termes de complexité temporelle et de complexité spatiale, mais il existe des différences dans les applications pratiques et l'efficacité. dans la phase initiale. Choisissez la méthode de mise en œuvre appropriée en fonction des exigences spécifiques et de la taille du graphique pour obtenir une meilleure efficacité opérationnelle et de meilleures performances.
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!