Adloun

Probleme – Un banc d'essai : naïf, Boyer-Moore, Rabin-Karp

Exercice · niveau 3 (difficile) · informatique (MP2I/MPI), chapitre 18 — Algorithmique des textes

Énoncé

On veut savoir lequel des trois algorithmes choisir, et sur quel critère.

Corrigé

1. Sur du texte français. On compte les comparaisons de caractères. Pour Rabin-Karp, ce sont uniquement celles des vérifications — s'y ajoutent opérations arithmétiques, une par fenêtre, que la colonne ne montre pas.

Motifocc.naïfBoyer-MooreRabin-Karp
`motif`54 (4 vérif.)
`texte`54 (4 vérif.)
`un\ `37 (7 vérif.)
`e`133 (33 vérif.)

Boyer-Moore divise par à et par à ; à il ne gagne rien, ce qui est logique : il ne peut jamais sauter plus que .

Rabin-Karp ne fait aucune comparaison inutile : sur ce texte, il n'y a eu aucune collision, et le nombre de comparaisons vaut exactement le nombre d'occurrences. Mais il a lu les caractères pour maintenir son empreinte.

2. Sur un alphabet dégénéré.

naïfBoyer-MooreRabin-Karp
, (196 vérif.)
, (0 vérif.)

La première ligne est le pire cas commun aux trois : occurrences, chacune coûtant comparaisons, soit — incompressible, puisqu'il faut bien lire chaque occurrence pour la certifier. Aucun algorithme ne peut faire mieux quand la sortie est de taille .

La seconde ligne les sépare radicalement. Boyer-Moore échoue immédiatement sur le b et saute de à chaque fois — d'où comparaisons, une par alignement. Rabin-Karp, lui, n'a aucune collision : , et il ne compare jamais un seul caractère. C'est son meilleur cas.

3. La conclusion, en trois règles.

Et une règle de méthode. Ce tableau a été produit par des compteurs placés dans les trois fonctions, sur les mêmes entrées. C'est la seule manière honnête de comparer : les mesures de temps dépendent du cache et du compilateur, les bornes asymptotiques ne distinguent pas de . On instrumente ce qu'on veut comparer, et l'on dit ce que le compteur ne compte pas — ici, l'arithmétique de Rabin-Karp et le précalcul de Boyer-Moore.

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.