Aller au contenu

Numérique et sciences informatiques (spécialité) · TerminaleBac

Recherche textuelle et Boyer-Moore : cours de Terminale NSI

Publié le 7 novembre 2026 · Mis à jour le 7 novembre 2026 · Signaler une erreur

L'essentiel

  • La recherche textuelle consiste à trouver une ou toutes les occurrences d'un motif dans un texte 2.
  • La méthode naïve teste chaque position du texte et compare le motif caractère par caractère : elle peut effectuer beaucoup de comparaisons.
  • Boyer-Moore compare le motif de droite à gauche et lit dans une table de décalage de combien avancer, pour sauter des positions inutiles 1.
  • La table de la version simplifiée (Horspool) se construit en une seule passe sur le motif, sans son dernier caractère.
  • Le coût d'une recherche se juge surtout au nombre de comparaisons de caractères 1 ; la préparation du motif n'est payée qu'une fois.

Le problème de la recherche textuelle

Quand tu utilises la fonction « rechercher » d'un traitement de texte ou d'un navigateur, un programme parcourt un long texte pour retrouver une courte suite de caractères. Ce problème fait partie des plus anciens et des plus étudiés de l'algorithmique du texte 2. Dans ce chapitre, tu vas voir pourquoi la méthode la plus simple peut être lente, puis comment l'algorithme de Boyer-Moore, dans sa version simplifiée, évite une grande partie du travail.

Tu as déjà rencontré l'idée de gagner du temps en organisant le calcul : le diviser pour régner découpe un problème, la programmation dynamique mémorise des résultats intermédiaires. Ici, l'idée est proche de cette dernière : on prépare une petite table à partir du motif, une fois pour toutes, puis on s'en sert pour avancer plus vite dans le texte.

La méthode naïve et son coût

Notons nn la longueur du texte et mm celle du motif. Imagine le motif écrit sur une bande de papier que tu poses sous le texte, d'abord tout à gauche. Tu compares les caractères en vis-à-vis. Si tout correspond, tu as trouvé une occurrence. Sinon, tu décales la bande d'un seul cran vers la droite et tu recommences.

Ce principe s'écrit très simplement :

Pour juger un algorithme de recherche, on ne se contente pas de chronométrer un programme : on compte des opérations. Dans ce domaine, le coût se ramène surtout au nombre de comparaisons entre deux caractères 1. C'est ce compteur que nous utiliserons dans tous les exemples.

L'idée de Boyer et Moore

L'algorithme date de 1977. Ses deux inventeurs, Boyer et Moore, étaient alors informaticiens à l'université d'Austin, au Texas 1. Il est très efficace 1, et il repose sur des idées simples que tu retrouveras dans la version simplifiée.

Première idée : comparer de droite à gauche. On aligne toujours le motif sous le texte, mais on commence la comparaison par le dernier caractère du motif. Si celui-ci ne correspond pas, on sait tout de suite que la position est mauvaise, et surtout on connaît la lettre du texte qui pose problème.

Deuxième idée : décaler de plusieurs crans. Grâce à cette lettre, on calcule de combien on peut avancer le motif sans risquer de manquer une occurrence. Ce décalage est lu dans une table de décalage, construite une seule fois à partir du motif.

Les étapes d'une recherche de HorspoolSuite d'étapes : préparer la table, aligner le motif, comparer de droite à gauche, décaler selon la table.1PréparerConstruire la table de décalage du motif.2AlignerPlacer le motif au début du texte (i = 0).3ComparerComparer de droite à gauche, dès le dernier caractère.4DécalerAvancer selon la lettre sous le dernier caractère.
  1. PréparerConstruire la table de décalage du motif.
  2. AlignerPlacer le motif au début du texte (i = 0).
  3. ComparerComparer de droite à gauche, dès le dernier caractère.
  4. DécalerAvancer selon la lettre sous le dernier caractère.
Les étapes d'une recherche de Horspool · Le cycle comparer puis décaler se répète jusqu'à la fin du texte.

Dans la suite, nous gardons les notations suivantes : le texte est la chaîne texte de longueur nn, le motif est la chaîne motif de longueur mm, et ii désigne la position du début de la fenêtre, c'est-à-dire l'indice du texte placé en face de motif[0]. La fenêtre couvre donc texte[i] jusqu'à texte[i+m-1].

La table de décalage

La table répond à la question : « Quand la lettre c se trouve en face du dernier caractère du motif, de combien puis-je avancer sans rater d'occurrence ? »

Soit c la lettre du texte située sous le dernier caractère du motif, que la comparaison ait réussi ou non.

  • Si c n'apparaît pas parmi les m−1m-1 premiers caractères du motif, aucune fenêtre décalée de moins de mm crans ne peut convenir. On avance donc de mm crans.
  • Si c apparaît parmi ces m−1m-1 caractères, on retient sa dernière apparition. On avance juste assez pour amener cette apparition en face de c dans le texte. Choisir la dernière apparition est prudent : on ne dépasse jamais une occurrence possible.
Table de décalage du motif ABRA
LettreDernier indice (hors dernier caractère)Décalage
A03
B12
R21
Autre lettreabsente4
Table de décalage du motif ABRA · Motif de longueur 4 : le décalage par défaut est la longueur du motif.

L'algorithme pas à pas

Complexité et comparaisons

Comme pour les autres algorithmes de recherche, on compte les comparaisons de caractères 1. Il faut distinguer plusieurs situations.

Le meilleur cas. Si la lettre sous le dernier caractère du motif est toujours absente du motif, chaque fenêtre coûte une seule comparaison et on avance de mm crans. Le nombre de comparaisons est alors de l'ordre de nm\dfrac{n}{m} : plus le motif est long, moins on lit de lettres. L'algorithme regarde alors moins de caractères que le texte n'en contient.

Le pire cas. Il existe des textes pour lesquels la version simplifiée se comporte comme la méthode naïve : par exemple le motif BAAA dans un texte formé de A. La table donne un décalage de 11 pour la lettre A, et chaque fenêtre coûte mm comparaisons, la différence étant tout à gauche. Le nombre de comparaisons peut alors atteindre l'ordre de n×mn \times m.

On retrouve une idée générale : une grande efficacité en pratique n'empêche pas l'existence de cas défavorables. La seconde table de l'algorithme complet sert justement à obtenir de meilleurs décalages 1.

À quoi ça sert, et au-delà du cours

La recherche d'un motif n'est pas réservée aux éditeurs de texte. Ces techniques servent pour la langue naturelle, pour les séquences génétiques en bioinformatique, pour les séquences musicales, pour les flux de données et les bases de données textuelles. On les retrouve aussi dans la détection de plagiats et l'analyse d'image 2.

Prenons une séquence d'ADN, qui s'écrit avec seulement quatre lettres. Chercher un court enchaînement de lettres dans un texte très long est exactement notre problème. L'alphabet très petit a une conséquence sur la table : beaucoup de lettres du texte apparaissent dans le motif, donc les décalages sont plus petits que pour un texte en langue naturelle, où l'alphabet est plus grand.

Exercices corrigés

Exercice 1 Construire une table de décalage

★☆☆Environ 8 min

On considère le motif BANANE et la version simplifiée (Horspool) de l'algorithme de Boyer-Moore.

  1. Donne la table de décalage de toutes les lettres du motif.
  2. Quel décalage obtient-on si la lettre du texte située sous le dernier caractère du motif est A ?
Indice 1

Le motif a 6 caractères : tu ne regardes que les 5 premiers, BANAN.

Indice 2

Pour une lettre répétée, garde la dernière apparition.

Voir la correction pas à pas
  1. La longueur du motif est m=6m = 6. On parcourt B, A, N, A, N aux indices 0 à 4.

  2. B : indice 0, décalage 6−1−0=56-1-0 = 5.

  3. A apparaît aux indices 1 et 3. On garde le dernier, 3 : décalage 6−1−3=26-1-3 = 2.

  4. N apparaît aux indices 2 et 4. On garde 4 : décalage 6−1−4=16-1-4 = 1.

  5. Toute autre lettre, y compris E, a pour décalage 66.

  6. Pour la lettre A, le décalage est donc 22.

La table est : B → 5, A → 2, N → 1, autres lettres → 6. Le décalage pour A vaut 2. Remarque que E, dernière lettre du motif et absente des cinq premières, reçoit la valeur par défaut 66.

Exercice 2 Compter les comparaisons

★★☆Environ 12 min

On cherche le motif ANA dans le texte BANANA avec la version simplifiée de Boyer-Moore (Horspool). Les indices du texte vont de 0 à 5. Les comparaisons se font de la droite vers la gauche et chaque comparaison de deux caractères compte pour 1.

  1. Donne la table de décalage.
  2. Déroule l'algorithme et indique les positions des occurrences.
  3. Quel est le nombre total de comparaisons ?
Indice 1

Pour la table, regarde seulement AN. Le décalage par défaut est 3.

Indice 2

Une occurrence trouvée coûte 3 comparaisons : les trois caractères sont comparés.

Voir la correction pas à pas
  1. Table : m=3m = 3. A (indice 0) → 3−1−0=23-1-0 = 2 ; N (indice 1) → 3−1−1=13-1-1 = 1 ; autres lettres → 3.

  2. i=0i = 0 : fenêtre BAN. Le dernier caractère du motif, A, est comparé à N : différence, 1 comparaison. Lettre sous le dernier caractère : N, décalage 1.

  3. i=1i = 1 : fenêtre ANA. Les trois caractères correspondent : occurrence en 1, 3 comparaisons. Lettre sous le dernier caractère : A, décalage 2.

  4. i=3i = 3 : fenêtre ANA. De nouveau 3 comparaisons réussies : occurrence en 3. Décalage 2, donc i=5i = 5.

  5. 5+3=8>65 + 3 = 8 > 6 : l'algorithme s'arrête.

  6. Total : 1+3+3=71 + 3 + 3 = 7 comparaisons.

Les occurrences sont aux indices 1 et 3, elles se chevauchent. Le nombre de comparaisons est 7.

Exercice 3 Le pire cas de la méthode naïve

★★★Environ 10 min

On utilise la méthode naïve (comparaison de gauche à droite) pour chercher le motif AAAB dans un texte de 20 caractères tous égaux à A.

  1. Combien de positions sont examinées ?
  2. Combien de comparaisons sont faites à chaque position ?
  3. Quel est le nombre total de comparaisons ?
Indice 1

Le nombre de positions possibles est n−m+1n - m + 1.

Indice 2

À chaque position, les trois premiers A correspondent puis le B est comparé à un A.

Voir la correction pas à pas
  1. Le texte a n=20n = 20 caractères, le motif m=4m = 4 : les positions vont de 0 à 16, soit 20−4+1=1720 - 4 + 1 = 17 positions.

  2. À une position donnée, on compare A avec A (réussite) trois fois, puis B avec A : différence. Cela fait 44 comparaisons.

  3. Le total est 17×4=6817 \times 4 = 68 comparaisons.

  4. On retrouve le maximum (n−m+1)×m(n-m+1)\times m : le pire cas est atteint.

La méthode naïve effectue 68 comparaisons. Avec la version simplifiée de Boyer-Moore, le B du motif est comparé en premier à un A du texte : différence immédiate. La lettre A apparaît à l'indice 2 du motif, son décalage est 4−1−2=14-1-2 = 1. Chaque fenêtre coûte alors 1 comparaison, soit 17 au total, au lieu de 68.

Quiz

7 questions · correction immédiate · ton score reste sur ton appareil.

  1. Dans l'algorithme de Boyer-Moore simplifié, dans quel ordre compare-t-on les caractères du motif à ceux du texte ?

  2. Quel est le décalage de la lettre R pour le motif ABRA ?

  3. Pourquoi le dernier caractère du motif n'est-il pas pris en compte dans la boucle de construction de la table (indices 0 à m−2m-2) ?

  4. Une lettre du texte absente du motif, située sous le dernier caractère du motif, impose un décalage égal à mm.

  5. Selon la documentation Éduscol, que mesure-t-on essentiellement pour évaluer la complexité d'un algorithme de recherche textuelle ?

  6. Pour le motif ANA dans le texte BANANA, combien d'occurrences trouve-t-on ?

  7. Quelle affirmation sur l'algorithme complet de Boyer-Moore est correcte ?

Les questions qu'on se pose

Pourquoi comparer de droite à gauche plutôt que de gauche à droite ?

Comparer d'abord le dernier caractère du motif donne tout de suite la lettre du texte située sous ce dernier caractère. C'est cette lettre qui sert à lire le décalage dans la table. En comparant de gauche à droite, on n'aurait pas cette information aussi vite.

La version simplifiée est-elle toujours plus rapide que la méthode naïve ?

En général, elle compare beaucoup moins de caractères, surtout si le motif est long et l'alphabet grand. Mais dans certains cas défavorables, par exemple un texte et un motif formés de très peu de lettres différentes, le nombre de comparaisons reste du même ordre que celui de la méthode naïve. Le coût de la table, proportionnel à mm, est aussi à payer.

Dois-je connaître l'algorithme complet de Boyer-Moore ?

Non. L'algorithme complet utilise une deuxième table de décalage, et sa justification comme sa programmation sont difficiles 1. On étudie la version simplifiée, à une seule table.

Comment vérifier mon déroulé à la main ?

Fais ces contrôles : chaque décalage doit être au moins 1 et au plus mm ; les occurrences trouvées doivent être confirmées par une lecture directe du texte (compare avec la méthode naïve sur un petit exemple) ; le nombre de comparaisons se compte fenêtre par fenêtre, de la droite vers la gauche, en s'arrêtant à la première différence.

Sources

  1. Document Éduscol - Recherche textuelle et algorithme de Boyer-Moore, Éduscol (Ministère de l'Éducation nationale). Consulté le 7 novembre 2026.
  2. Algorithmique du texte, Wikipédia. Consulté le 7 novembre 2026.

Les numéros dans le texte renvoient à ces sources. Une source qui ne dit pas ce qu'on lui fait dire ? Signale-le.

Signaler une erreur sur cette page

Je suis en…

Primaire

  • CP Bientôt
  • CE1 Bientôt
  • CE2 Bientôt
  • CM1 Bientôt
  • CM2 Bientôt

Collège

Lycée

Supérieur

  • BTS Bientôt
  • BUT Bientôt
  • Licence Bientôt
  • Prépas Bientôt

Sur cette page