Adloun

informatique (MP2I/MPI) · Chapitre 18 · Application directe du cours

Problème — Un banc d'essai : naïf, Boyer-Moore, Rabin-Karp

Algorithmique des textes · niveau 3 (difficile)

Énoncé

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

  • Mesurer les trois sur un texte français de caractères, pour des motifs de longueur , et .
  • Mesurer les trois sur avec , puis avec .
  • Conclure : quand choisit-on lequel ?

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
motif54 (4 vérif.)
texte54 (4 vérif.)
un\ 37 (7 vérif.)
e133 (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.

  • Naïf quand le texte est court ou le motif rare : il n'a aucun précalcul, et sur du langage naturel il est en de fait. Sur un texte de caractères, le précalcul de cases de Boyer-Moore coûte plus que la recherche entière.
  • Boyer-Moore pour un motif long dans un grand texte à alphabet riche. Le gain croît avec et avec , et s'annule quand l'un des deux est petit.
  • Rabin-Karp pour plusieurs motifs de même longueur, ou quand la comparaison de caractères est chère (motifs longs, structures comparées champ par champ, recherche à deux dimensions dans une image). Pour un seul motif, il ne bat presque jamais Boyer-Moore, car il lit tout le texte alors que Boyer-Moore en saute une partie.

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.

Exercices semblables

Le cours du chapitre · Tous les exercices du chapitre