-SA Théorie des Graphes DUT Informatique semestre 2 Mathématiques TP n◦ 4 -NC Coloriage d’un graphe Exercice 1 -BY Coloriage d’un graphe Le problème du coloriage d’un graphe (simple) non-orienté est d’assigner des couleurs à tous les sommets d’un graphe de telle sorte que : • 2 sommets appartenant à une même arête aient une couleur différente • utiliser le moins de couleurs possibles (c’est la vrai contrainte du problème) l’algorithme le plus simple qui résolve ce problème est le suivant : ✩ CC ✬ lice nce fonction G = Coloriage(G) couleur courante = 1 pour tout x sommet de G faire V = liste des voisins de x couleur = plus petite couleur non encore utilisée dans V colorier x avec cette couleur si couleur > couleur courante alors couleur courante = couleur fin fin faire 3 2 1 5 ✪ nes 3 5 4 3 uni v 1 1 6 2 1 ux@ 2 2 -ren En utilisant cet algorithme ≪ à la main ≫ : 1. Colorier le graphe ci-contre 2. Combien de couleurs faut-il ? 3. Ce nombre est il optimal ? 4. Que deviennent ces résultats si • on ajoute au graphe l’arête {1; 5} • on ajoute l’arête {1; 5} et {1; 6} • on retire du graphe l’arête {3; 5} 1.fr ✫ 5 3 5 phi lipp e.ro 4 6 4 6 4 6 5. Écrire une fonction scilab G=coloriage(G) qui colorie un graphe G suivant la méthode l’algorithme donné plus haut. Tester avec le graphe exo870G1.graph. Indication : Les couleurs des sommets de G sont des nombres 1, 2, 3 . . . stockés dans G.node color. Mettre ces couleurs à 0 puis commencer avec couleur courante = 1 2 8 11 14 6. Appliquer cet 5 algorithme au graphe exo870G2.graph 3 et trouver γ(G) : 6 9 12 15 1 4 1 7 10 13 -SA Théorie des Graphes Mathématiques TP n◦ 4 Coloriage d’un graphe -NC DUT Informatique semestre 2 Exercice 2 -BY Optimisation du coloriage glouton Le coloriage Glouton ne donne pas toujours le nombre optimal de couleurs ! Pour améliorer le résultat il suffit de modifier l’ordre de coloriage des sommets en les prenant dans l’ordre décroissant de leur degré. 6. 5. 8. -->[degres,ordre]=gsort(D,’g’,’d’) ordre = 8. 6. 2. 3. 9. 1. degres = 8. 6. 6. 6. 6. 5. 7. lice -->D=nodes_degrees(G) D = 5. 6. 6. 4. 2. 6. 5. 1.fr 4. nce CC 1. Écrire une fonction scilab G=coloriage2(G) qui colorie un graphe G suivant la méthode l’algorithme glouton mais en traitant les sommets dans l’ordre décroissant de leur degré. Indication : utiliser nodes degrees pour calculer le degré de chaque sommet puis gsort pour trier les sommets : 5. 4. 10. 4. 4. 8 11 14 nes 2 4. 4. 4 uni v 3. 3 -ren 5 Comparer le nouveau coloriage obtenu pour le graphe exo870G2.graph avec celui de l’algorithme glouton non optimisé. Les résultats sont ils les même ? Les résultats 1 sont ils optimaux ? 6 9 12 10 7 13 lipp e.ro ux@ 4 Comparer les coloriages obtenus pour le graphe exo1000G.graph avec les deux algorithmes glouton (optimisés et non-optimisé). Les résultats sont ils les même ? Les résultats sont ils optimaux ? 3 5 8 9 10 15 1 7 6 2 phi 4. Modifier votre programme en ajoutant des commandes printf pour faire afficher les sommets colorié et la couleur utilisée à chaque étape de l’algorithme. 2 -SA Théorie des Graphes DUT Informatique semestre 2 Mathématiques TP n◦ 4 -NC Coloriage d’un graphe Exercice 3 -BY Algorithme de coloriage de Welsh-Powell L’algorithme de Welsh-Powell est un algorithme de coloriage beaucoup plus rapide que l’algorithme de base mais qui ne trouve pas toujours le nombre minimal de couleurs, mais un nombre assez proche de γ(G). L’algorithme est le suivant : ✬ ✩ 1.fr lice nce CC fonction G = Welsh(G) L = liste des sommets classés dans l’ordre décroissant de leur degré couleur courante = 0 tant que L 6= ∅ faire incrémenter la couleur courante Colorier s le premier sommet de L avec la couleur courante éliminer s de L V = liste des voisins de s pour tout x dans L faire si x ∈ / V alors colorier x avec la couleur courante ajouter les voisins de x à V fin fin faire éliminer les sommets coloriés de L fin faire ✫ ✪ -ren nes 1. Colorier le graphe G ci-dessous (exo394G.graph) avec l’algorithme de WelshPowell : 2 8 uni v 5 3 6 4 9 11 14 12 15 ux@ 10 1 7 13 2. Implémenter l’algorithme de Welsh/Powell en scilab et tester sur le graphe précédent. phi lipp e.ro Indication : utiliser [degre,sommets]=gsort(degre) pour trier les sommets dans l’ordre décroissant de leur degré 3. Le coloriage trouvé est il optimal ? 4. Charger le graphe paris.graph dans scilab (a) Colorier les sommets du graphe paris.graph avec les fonctions coloriage et Welsh, comparer les temps d’exécution et le nombre de couleurs obtenues : -->P=load_graph(’paris.graph’); -->tic();P1=coloriage(P);toc() -->tic();P2=Welsh(P);toc() (b) De même colorier les arêtes de paris.graph en utilisant coloriage et Welsh 3