Rabin-Karp à la main, et une collision
Exercice · niveau 2 · informatique (MP2I/MPI), chapitre 18 — Algorithmique des textes
Énoncé
Avec la base et le module , chercher dans . Donner les empreintes de toutes les fenêtres, les occurrences, et les fausses alertes.
Corrigé
. Les fenêtres et leurs empreintes, calculées par la formule de glissement :
i= 0 23590 h= 8 i= 8 41526 h= 4
i= 1 35902 h= 9 i= 9 15267 h= 5
i= 2 59023 h= 3 i=10 52673 h=10
i= 3 90231 h=11 i=11 26739 h=11
i= 4 02314 h= 0 i=12 67399 h= 7 <-- COLLISION
i= 5 23141 h= 1 i=13 73992 h= 9
i= 6 31415 h= 7 <-- OCCURRENCE i=14 39921 h=11
i= 7 14152 h= 8
Une occurrence (en ) et une fausse alerte (en ) : également, et pourtant .
Ce que la fausse alerte coûte. Elle déclenche une vérification caractère par caractère, . Avec , on attend une collision toutes les fenêtres environ : sur fenêtres, en avoir une est conforme. Le coût total devient , ce qui n'est que si est grand devant — d'où le du chapitre.
Le glissement, vérifié à la main de à . On retranche la contribution de la lettre sortante, on décale, on ajoute l'entrante :
Or , donc , et . C'est bien la valeur mesurée.
Le point à ne jamais oublier, et le chapitre le met en capitales : l'égalité d'empreintes n'est qu'un filtre. C'est un test qui n'a pas de faux négatif — deux mots égaux ont forcément la même empreinte — mais qui a des faux positifs. Le chapitre chap:probabilistes nommera ce schéma ; le chapitre chap:hachage en donne la cause.
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.