MOCA – CO9 Arbre couvrant de poids minimum G = (S, A) Graphe connexe et une arête a / c a Arbre couvrant T c a / T est un arbre, x S , (x , y) T. Ainsi le poids de T = c a. Le problème est de chercher un graphe T / le poids de T soit minimum. Cycle et co-cycle S Cycle : chaîne dont le 2 extrémités coïncident ( est un cycle). X Co-cylce : ensemble des arêtes ayant une extrémité dans le cycle et une autre hors du cycle ( est un co-cycle). Propriétés Z : a T (ensembles des arêtes n’appartenant pas à T). Propriété 1 : Z si faux alors T (impossible car un arbre est sans cycle) Propriété 2 : T Si faux toutes arêtes de n’est pas une arête de T (impossible) Définition (x , y) est un approximant / X A , Y A si et seulement si il existe T un arbre couvrant de poids minimum / X T, Y T. approximant (x,y) / X A , Y A ssi T arbre couvrant de poids minimum / X T, Y T. On note Z est l’ensemble des arêtes – (ensemble des arêtes X ensemble des arêtes Y). Z = A \ {X Y} Règles Règles 1 : aT / X=,Y Soit une arête de poids minimal a Y (X {a} , Y) est un approximant 1 - si X {a} T => T est de poids minimal T c’est un approximant 2 - si a T a T ceca On supprime e de T On ajoute a à T => T’ est un arbre couvrant de poids minimum Règles 2 : e /Y=,Z si X T alors impossibilité Soit une arête de poids maximal a Z (X , Y {a}) est un approximant a 1 - si a T => T est de poids minimal T c’est un approximant 2 - si a T cace On supprime a de T On ajoute e à T => T’ est un arbre couvrant de poids minimum 1/3 T eT MOCA – CO9 Algorithme générique et démonstration Algorithme Générique X <- Y <- Z <- A Tant que Règle 1 ou Règle 2 applicable faire Selon choix Règle 1 ou Règle 2 A est uniedans X ou Y Fin selon Fin tant que Fin Algorithme Générique ( , ) est un approximant. Après chaque passage on a (X , Y) est un approximant. Supposons qu’à la fin de l’algorithme tout sommet de s a une arête (s , t) X. X couvre tous les sommets et est connexe, X est un approximant => X acyclique => X est un arbre couvrant de poids minimum. Résolution Algorithme KRUSKAL Trier les arêtes par poids croissant (a1, a2, …, an) Pour i de 1 à n faire Si T { ai} ne créer pas de cycle alors T = T { ai} Fin si Fin pour Fin Algorithme KRUSKAL 3 3 2 3 2 4 3 2 2 4 3 1 2 4 3 1 3 4 3 1 3 2 2 impossible car cycle 2 4 3 1 2/3 2 1 2 MOCA – CO9 Algorithme PRIM Marquer arbitrairement un sommet Tant qu‘il existe un sommet faire Choisir a de poids minimum dans (T) Ajouter a à T T = T {a} a = (x , y) / x T , y T Fin Tant que Algorithme PRIM 3 3 2 a 3 2 4 3 2 2 4 3 1 2 4 3 1 3 2 4 3 1 3 2 2 4 3 1 3/3 2 1 2