AccueilđŸ‡«đŸ‡·Chercher

Algorithme de Kruskal


En informatique, l'algorithme de Kruskal est un algorithme de recherche d'arbre recouvrant de poids minimum (ARPM) ou arbre couvrant minimum (ACM) dans un graphe connexe non-orienté et pondéré. Il a été conçu en 1956 par Joseph Kruskal.

L’agorithme de Kruskal

Description du problĂšme

On considĂšre un graphe connexe non-orientĂ© et pondĂ©rĂ© : chaque arĂȘte possĂšde un poids qui est un nombre qui reprĂ©sente le coĂ»t de cette arĂȘte. Dans un tel graphe, un arbre couvrant est un sous-graphe connexe sans cycle qui contient tous les sommets du graphe. Le poids d'un tel arbre est la somme des poids des arĂȘtes qui le compose. Un arbre couvrant minimum est un arbre couvrant dont le poids est infĂ©rieur ou Ă©gal Ă  celui de tous les autres arbres couvrants du graphe. L'objectif de l'algorithme de Kruskal est de calculer un tel arbre couvrant minimum.

Ce problÚme a de nombreuses applications, par exemple simplifier un cùblage ou supprimer les liaisons maritimes les moins rentables en préservant l'accessibilité aux différents ports.

Principe de l'algorithme

L'algorithme construit un arbre couvrant minimum en sĂ©lectionnant des arĂȘtes par poids croissant. Plus prĂ©cisĂ©ment, l'algorithme considĂšre toutes les arĂȘtes du graphe par poids croissant (en pratique, on trie d'abord les arĂȘtes du graphe par poids croissant) et pour chacune d'elles, il la sĂ©lectionne si elle ne crĂ©e pas un cycle. Le tableau suivant donne un exemple d'exĂ©cution de l'algorithme de Kruskal.


Image Description
AD et CE sont les arĂȘtes de poids les plus faibles, ici 5. AD est sĂ©lectionnĂ©e de maniĂšre arbitraire.
CE est l'arĂȘte suivante de poids le plus faible. Elle est sĂ©lectionnĂ©e car elle ne forme pas de cycle.
L'arĂȘte DF de poids 6 est ensuite choisie.
Les arĂȘtes de poids faibles (7) suivantes sont AB et BE. AB est choisie de maniĂšre arbitraire. L'arĂȘte BD est dessinĂ©e en rouge car il existe un chemin (en vert) entre B et D. BD ne sera donc jamais sĂ©lectionnĂ©e.
La prochaine arĂȘte considĂ©rĂ©e est BE de poids 7. BC ne sera jamais choisie car la choisir formerait le cycle BCE. De mĂȘme DE formerait le cycle DEBA et FE formerait le cycle FEBAD.
Finalement, l'arĂȘte EG de poids 9 est choisie et un arbre couvrant minimum est trouvĂ© (en vert).

On remarque que lors du dĂ©roulement de l'algorithme, les arĂȘtes sĂ©lectionnĂ©es ne forment pas nĂ©cessairement un graphe connexe. Mais Ă  la fin, les arĂȘtes sĂ©lectionnĂ©es (en vert) forment un graphe connexe.

Algorithme

Execution de l’algorithme de Kruskal

Pseudo-code

Kruskal(G) :
1   A := Ăž
2   pour chaque sommet v de G :
3      créerEnsemble(v)
4   trier les arĂȘtes de G par poids croissant
5   pour chaque arĂȘte (u, v) de G prise par poids croissant :
6      si find(u) ≠ find(v) :
7         ajouter l'arĂȘte (u, v) Ă  l'ensemble A
8         union(u, v)
9   renvoyer A

Les fonctions crĂ©erEnsemble, find et union sont les trois opĂ©rations d'une structure de donnĂ©es Union-Find – qui, respectivement, ajoute une classe singleton Ă  la structure, renvoie un reprĂ©sentant de la classe d'un Ă©lĂ©ment et fusionne deux classes d'Ă©quivalence. Une amĂ©lioration possible est d'utiliser un tas Ă  la place d'un tri afin de diminuer la complexitĂ©.

Preuve de correction

La preuve se compose de deux parties. PremiÚrement, il est prouvé que l'algorithme produit un arbre couvrant. DeuxiÚmement, il est prouvé que l'arbre couvrant construit est d'un poids minimal.

Arbre couvrant

Soit un graphe connexe pondĂ©rĂ© et soit le sous-graphe de produit par l'algorithme. ne peut pas avoir de cycle, car par dĂ©finition une arĂȘte n'est pas ajoutĂ©e si elle aboutit Ă  un cycle. ne peut pas ne pas ĂȘtre connexe, car la premiĂšre arĂȘte rencontrĂ©e qui joint deux composants de aurait Ă©tĂ© ajoutĂ©e par l'algorithme. Ainsi, est un arbre couvrant de .

Minimalité

Nous montrons que la proposition suivante 'P' est vraie par rĂ©currence : Si F est l'ensemble des arĂȘtes choisie Ă  n'importe quel stade de l'algorithme, alors il y a un arbre couvrant minimum qui contient «F» ainsi qu'aucune des arĂȘtes qui ont Ă©tĂ© rejetĂ©es par l'algorithme.

  • Clairement 'P' est vrai au dĂ©but, quand F est vide: n'importe quel arbre couvrant minimum fera l'affaire, et il en existe un car un graphe connexe pondĂ©rĂ© a toujours un arbre couvrant minimum .
  • Supposons maintenant que 'P' soit vrai pour un ensemble d'arĂȘtes non final F et que T soit un arbre couvrant minimum contenant F .
    • Si l'arĂȘte suivante choisie a est Ă©galement dans T , alors 'P' est vrai pour F + a .
    • Sinon, si a n'est pas dans T alors T + a a un cycle C. Ce cycle contient des arĂȘtes qui n'appartiennent pas Ă  F , puisque a ne forme pas un cycle lorsqu'il est ajoutĂ© Ă  F mais le fait dans T . Soit b une arĂȘte qui est dans C mais pas dans F + a . Notons que b appartient Ă©galement Ă  T et que 'P' n'a pas Ă©tĂ© pris en compte par l'algorithme. b doit donc avoir un poids au moins aussi grand que a . Puis T - b + a est un arbre, et il a le mĂȘme poids ou moins que T . Donc T - b + a est un arbre couvrant minimum contenant F + a et encore une fois 'P' tient.
  • Par consĂ©quent, selon le principe de rĂ©currence, 'P' vaut quand F est devenu un arbre couvrant, ce qui n'est possible que si F est un arbre couvrant minimum lui-mĂȘme.

Complexité

De maniĂšre gĂ©nĂ©rale, la complexitĂ© de l'algorithme est Θ(E log E) + Θ(E(|find| + |union|)), avec E le nombre d'arĂȘtes du graphe G, et |find| et |union| les complexitĂ©s respectives des opĂ©rations de recherche et d'union de notre structure Union-Find.

Une reprĂ©sentation naĂŻve, utilisant des tableaux, aura donc une complexitĂ© en temps Θ(E x V), dominĂ©e par |find| = Θ(V) avec V le nombre de sommets du graphe G. Cette complexitĂ© se trouve fortement amĂ©liorĂ©e par une implĂ©mentation utilisant des arbres, passant Ă  Θ(E log V). En compressant les chemins, on peut mĂȘme atteindre une complexitĂ© amortie en temps Θ(E log* V).

Référence

(en) Cet article est partiellement ou en totalitĂ© issu de l’article de WikipĂ©dia en anglais intitulĂ© « Kruskal's algorithm » (voir la liste des auteurs).

Voir aussi

Bibliographie

Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest et Clifford Stein, Introduction Ă  l'algorithmique, Dunod, [dĂ©tail de l’édition]

Articles connexes

Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplĂ©mentaires peuvent s’appliquer aux fichiers multimĂ©dias.