Adloun

É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.