Lycée La Martinière Monplaisir Option Informatique MP/MP*
Année 2015-2016 TP 06 : Algorithme de Kruskal
TP 06 : Algorithme de Kruskal
NB : il est judicieux de terminer le TP précédent avant de commencer celui-ci.
1 Introduction
Étant donné un graphe non-orienté connexe G = (S, A) dont les arêtes sont munies d’un poids w :A→ R, on cherche un sous-graphe connexe C de G, dont le poids total des arêtes soit minimal.
Donnez une condition simple sur wqui assure que ce sous-graphe soit un arbre. Lors- qu’elle est vérifiée, on dit alors queC est unarbre couvrant de poids minimal.
Dans la suite, on supposera que west à valeurs positives ou nulles.
2 Algorithme de Kruskal
L’algorithme de Kruskal est un des algorithmes permettant de construire un arbre couvrant minimal. Il utilise une structure de données union-find pour savoir si une arête doit être ajoutée ou si elle est redondante.
1. Lire sur wikipedia la description de l’algorithme de Kruskal.
2. Implanter une fonction kruskal : graphe -> graphe prenant en argument un graphe non-orienté connexe G pondéré et retournant un arbre couvrant minimal C.
Le type graphereprésentera un graphe non-orienté pondéré. Si Gpossède nsom- mets, on numérotera les sommets de0 à n−1 inclus et G sera représenté par un tableau de listest, de taillen, tel que pour tout couple d’entiers (i, j) et tout flot- tant w, G possède une arête {i, j} de poids w si et seulement si t.(i) contient le couple(j, w) (Gétant non-orienté,t.(j) contiendra alors le couple(i, w)).
Vous testerez extensivement votre fonction.
3. Si vous avez fini :
a) Démontrez que l’algorithme de Kruskal retourne bien un arbre couvrant de poids minimal.
b) Implantez l’algorithme de Prim, dont vous trouverez une description sur wiki- pedia.
Judicaël Courant- 19 janvier 2016 1/1