DSATUR
implementation by p. Rolland
04/1998
New Methods to color the vertices of a graph
Communication of ACM. April 1979, Vol. 22. Number 4.
Daniel Brelaz
[ Introduction | Algorithmique | implémentation | Exemple d'éxécution ]
On considère un graphe G=(V,E) simple connexe et non-orienté. On rappelle que la définition usuelle d'un graphe simple est un graphe sans boucles, ni multi-arcs (resp.multi-arêtes). Pour chaque sommet v de V, on calcule le degré de saturation DSAT(v) de la manière suivante:
L'algorithme DSATUR est un algorithme de coloration séquentiel, au sens ou il colorie un seul sommet à la fois et tel que:
Dans un premier temps on voit bien d'une part que la preuve de terminaison est triviale et d'autre part que l'algorithme est séquentiel. Dans le détail l'algorithme est le suivant:
Exemple (3) d'implémentation en C et php
Détails : Exemple de résolution algorithmique
Dans cette partie on cherchera à exhiber de manière algorithmique les futurs composants (ie procèdures ou fonctions) qui constitueront notre programme. Dans cette perspective, on peut d'abord traduire de manière naïve le procèdè itératif donné plus haut.
fonction DSAT (G)
|
A ce stade, clairement on peut simplifier puisque sommet par sommet on colorie le graphe, on a alors:
fonction DSAT (G)
|
Il reste alors à définir trois fonctions. On les donne :
Pour la dernière fonction il y a, de notre point de vue, plusieurs remarques à formuler. Soit v le sommet dernièrement colorié; soit c sa couleur. La mise à jour des dsat ne s'opère que sur :
- 1. les sommets non coloriés
- 2. les voisins vi (i de 1 à degré(v)) du sommet dernièrement coloriés.
- 3. Pour ces derniers il y a trois cas. Soit vi un voisin de v.
- 3a. vi ne possèdait aucun voisin colorié avant la coloration de v, auquel cas leur dsat(vi)=degre(vi). On affecte alors dsat(vi)=1.
- 3b. Sinon ( vi possède des voisins coloriés)
- 3bi. vi ne possède (mise à part v) aucun voisin de couleur c. On affecte dsat(vi)=dsat(vi)+1
- 3bii. vi possède (mise à part v) un ou plusieurs voisins de couleur c. On ne modifie pas dsat(vi)
- fonction MiseAJourDesDsat (v,G)
- Pour i de 1 à degré(v) faire
- si (colorie(iemeVoisinDuSommet(i,v)) = faux) alors
- si (dsat((iemeVoisinDuSommet(i,v))=degre((iemeVoisinDuSommet(i,v))) alors
- dsat((iemeVoisinDuSommet(i,v))=1
- sinon
- G <- IncrementationOuPasDeDsat(iemeVoisinDuSommet(i,v),couleurDuSommet(v),G)
- fin si
- fin pour
- Retourner (G)
- fin fonction
Philippe Rolland - 04/98