Adloun

Hors programme. Écrire table(f, n) qui produit la table de vérité…

Exercice supplémentaire · niveau 3 (difficile) · NSI (première), chapitre 2 — Flottants, booléens et textes · Algèbre de Boole au-delà de trois opérateurs

Énoncé

Hors programme. Écrire table(f, n) qui produit la table de vérité complète d'une fonction booléenne à entrées. Combien de lignes ? Combien de fonctions booléennes distinctes à variables existe-t-il ? Conclure sur la faisabilité.

Corrigé


def table(f, n):
    """Toutes les lignes de la table de verite de f, a n entrees.

    Precondition : f accepte n arguments valant 0 ou 1. La ligne k est
    l'ecriture binaire de k sur n bits : on n'oublie ainsi aucun cas.
    """
    lignes = []
    for k in range(2 ** n):
        bits = [(k >> (n - 1 - i)) & 1 for i in range(n)]
        lignes.append((bits, f(*bits)))
    return lignes

>>> table(lambda a, b, c: (a & b) | c, 3)
[([0, 0, 0], 0), ([0, 0, 1], 1), ([0, 1, 0], 0),
 ([0, 1, 1], 1), ([1, 0, 0], 0), ([1, 0, 1], 1),
 ([1, 1, 0], 1), ([1, 1, 1], 1)]

Le décalage (k >> (n - 1 - i)) & 1 extrait le -ème bit de en partant de la gauche. C'est le procédé du chapitre 1 : le comptage binaire énumère exactement une fois chaque combinaison.

Les deux dénombrements. La table a lignes. Une fonction booléenne, c'est le choix d'un ou d'un sur chacune de ces lignes : il y a donc fonctions distinctes à variables.

La conclusion, et elle est brutale. Pour : lignes, fonctions — on peut toutes les écrire. Pour : lignes, mais milliards de fonctions. Pour : , soit plus de . Vérifier une équivalence reste faisable ( lignes) bien plus longtemps que parcourir les fonctions () — et même la première tâche devient impraticable vers .

Prolongement : décider si une formule booléenne peut être rendue vraie s'appelle le problème SAT. Aucun algorithme connu ne le résout en temps raisonnable dans le pire cas, et savoir s'il en existe un est le problème « P contre NP », l'une des grandes questions ouvertes des mathématiques.

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.