Écrire un vérificateur
Exercice · niveau 2 · informatique (MP2I/MPI), chapitre 31 — Décidabilité et classes de complexité
Énoncé
Écrire en C le vérificateur de certificat pour la -coloration d'un graphe, avec sa spécification et sa complexité. L'éprouver sur le graphe de Petersen.
Corrigé
Le certificat est une couleur par sommet ; le vérificateur contrôle deux choses, et seulement deux.
/* Verifie qu'une coloration est propre.
Entrees : n sommets, m aretes (u[i], v[i]), une couleur par sommet, k couleurs.
Sortie : true ssi toutes les couleurs sont dans [0, k[ et aucune arete
ne joint deux sommets de meme couleur.
Complexite : Theta(n + m) -- une seule passe sur les sommets, une sur les aretes. */
bool coloration_propre(int n, int m, const int u[], const int v[],
const int couleur[], int k) {
assert(n >= 0 && m >= 0 && k >= 1);
for (int i = 0; i < n; i = i + 1) {
if (couleur[i] < 0 || couleur[i] >= k) { return false; }
}
for (int a = 0; a < m; a = a + 1) {
if (couleur[u[a]] == couleur[v[a]]) { return false; }
}
return true;
}
La première boucle est celle qu'on oublie. Sans elle, un certificat qui attribuerait la couleur à chaque sommet serait accepté pour : aucune arête ne joindrait deux couleurs différentes, et l'on aurait « prouvé » qu'un graphe quelconque est -coloriable. Un vérificateur doit contrôler que le certificat est bien formé avant de contrôler qu'il convient — sans quoi il ne vérifie rien.
L'exécution sur le graphe de Petersen ( sommets, arêtes) donne :
| Recherche exhaustive d'une -coloration | essais sur |
|---|---|
| Certificat trouvé | `0 2 0 2 1 2 1 1 0 0` |
| Vérification du certificat | comparaisons, temps non mesurable |
| Certificat abîmé (deux voisins de même couleur) | rejeté |
| Certificat avec une couleur | rejeté |
L'asymétrie, en chiffres. Trouver a demandé colorations essayées ; vérifier en demande une et coûte comparaisons. Sur un graphe à sommets, la recherche exhaustive demanderait essais, et la vérification resterait proportionnelle au nombre d'arêtes.
C'est très exactement la définition de , rendue concrète : le certificat tient en entiers, sa vérification en deux boucles. Rien d'autre n'est exigé.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.