licence CC-BY-NC-SA

publicité
-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
Téléchargement