Adloun

NSI (terminale) · Chapitre 16 · Exercice de TD

Compter les comparaisons

Calculabilité, décidabilité et paradigmes de programmation · niveau 3 (difficile)

Énoncé

Compter les comparaisons.

Instrumenter les deux algorithmes de recherche pour qu'ils comptent leurs comparaisons de caractères, puis comparer sur le texte ONCHERCHECHAT avec le motif CHAT.

Corrigé

On ajoute un compteur incrémenté à chaque comparaison de caractères, en n'oubliant pas celle qui échoue : c'est une comparaison comme une autre.


def naive_comptee(texte, motif):
    n, m = len(texte), len(motif)
    comparaisons, positions = 0, []
    for i in range(n - m + 1):
        j = 0
        while j < m and texte[i + j] == motif[j]:
            j = j + 1
            comparaisons = comparaisons + 1
        if j < m:
            comparaisons = comparaisons + 1   # la comparaison qui echoue
        else:
            positions.append(i)
    return positions, comparaisons

def boyer_moore_comptee(texte, motif):
    n, m = len(texte), len(motif)
    dernier = table_mauvais_caractere(motif)
    comparaisons, positions, i = 0, [], 0
    while i <= n - m:
        j = m - 1
        while j >= 0 and texte[i + j] == motif[j]:
            j = j - 1
            comparaisons = comparaisons + 1
        if j < 0:
            positions.append(i)
            i = i + 1
        else:
            comparaisons = comparaisons + 1
            i = i + max(1, j - dernier.get(texte[i + j], -1))
    return positions, comparaisons

print(naive_comptee("ONCHERCHECHAT", "CHAT"))        # ([9], 17)
print(boyer_moore_comptee("ONCHERCHECHAT", "CHAT"))  # ([9], 7)

Les deux algorithmes trouvent la même occurrence, mais l'un a lu fois un caractère du texte et l'autre fois. Sur un texte de plusieurs mégaoctets, ce rapport se traduit directement en secondes.

100 % gratuit

Essaie le suivant avec le tuteur

Faire l'exercice suivant avec le tuteur

Sans compte : le cours, 2 minutes de podcast et de vidéo et un exercice avec le tuteur. Pour tout le reste : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant avec le tuteur →