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 la longueur du texte et 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.
- PréparerConstruire la table de décalage du motif.
- AlignerPlacer le motif au début du texte (i = 0).
- ComparerComparer de droite à gauche, dès le dernier caractère.
- DécalerAvancer selon la lettre sous le dernier caractère.
Dans la suite, nous gardons les notations suivantes : le texte est la chaîne texte de longueur , le motif est la chaîne motif de longueur , et 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
cn'apparaît pas parmi les premiers caractères du motif, aucune fenêtre décalée de moins de crans ne peut convenir. On avance donc de crans. - Si
capparaît parmi ces caractères, on retient sa dernière apparition. On avance juste assez pour amener cette apparition en face decdans le texte. Choisir la dernière apparition est prudent : on ne dépasse jamais une occurrence possible.
| Lettre | Dernier indice (hors dernier caractère) | Décalage |
|---|---|---|
| A | 0 | 3 |
| B | 1 | 2 |
| R | 2 | 1 |
| Autre lettre | absente | 4 |
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 crans. Le nombre de comparaisons est alors de l'ordre de : 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 pour la lettre A, et chaque fenêtre coûte comparaisons, la différence étant tout à gauche. Le nombre de comparaisons peut alors atteindre l'ordre de .
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
On considère le motif BANANE et la version simplifiée (Horspool) de l'algorithme de Boyer-Moore.
- Donne la table de décalage de toutes les lettres du motif.
- 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
La longueur du motif est . On parcourt
B,A,N,A,Naux indices 0 à 4.B: indice 0, décalage .Aapparaît aux indices 1 et 3. On garde le dernier, 3 : décalage .Napparaît aux indices 2 et 4. On garde 4 : décalage .Toute autre lettre, y compris
E, a pour décalage .Pour la lettre
A, le décalage est donc .
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 .
Exercice 2 Compter les comparaisons
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.
- Donne la table de décalage.
- Déroule l'algorithme et indique les positions des occurrences.
- 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
Table : .
A(indice 0) → ;N(indice 1) → ; autres lettres → 3.: 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.: fenêtre
ANA. Les trois caractères correspondent : occurrence en 1, 3 comparaisons. Lettre sous le dernier caractère :A, décalage 2.: fenêtre
ANA. De nouveau 3 comparaisons réussies : occurrence en 3. Décalage 2, donc .: l'algorithme s'arrête.
Total : 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
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.
- Combien de positions sont examinées ?
- Combien de comparaisons sont faites à chaque position ?
- Quel est le nombre total de comparaisons ?
Indice 1
Le nombre de positions possibles est .
Indice 2
À chaque position, les trois premiers A correspondent puis le B est comparé à un A.
Voir la correction pas à pas
Le texte a caractères, le motif : les positions vont de 0 à 16, soit positions.
À une position donnée, on compare
AavecA(réussite) trois fois, puisBavecA: différence. Cela fait comparaisons.Le total est comparaisons.
On retrouve le maximum : 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 . 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.
-
La comparaison commence par le dernier caractère du motif : on connaît ainsi tout de suite la lettre du texte qui sert à lire le décalage. L'ordre gauche-droite est celui de la méthode naïve, qui n'utilise pas de table de décalage.
-
Rest à l'indice 2 et : décalage . L'erreur tentante est de répondre 2 en prenant l'indice, ou 4 en oubliant la table. -
Pour , la formule vaut 0 : aucun avancement. Le dernier caractère est bien comparé en premier, donc la deuxième réponse est fausse.
-
Vrai : une telle lettre ne peut appartenir à aucune occurrence qui la recouvrirait, on saute donc la fenêtre entière. Penser que le décalage est toujours 1 est l'erreur de la méthode naïve.
-
On compte les comparaisons de caractères 1. Le nombre de lignes ne mesure pas le temps d'exécution, et le nombre d'occurrences n'est qu'une partie du travail.
-
On trouve
ANAaux indices 1 et 3. Ces occurrences se chevauchent, ce qui trompe ceux qui n'en comptent qu'une. -
La version complète ajoute une deuxième table qui permet de décaler davantage 1. C'est bien la version de Horspool qui est simplifiée, pas l'inverse.
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 à , 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 ; 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
- Document Éduscol - Recherche textuelle et algorithme de Boyer-Moore, Éduscol (Ministère de l'Éducation nationale). Consulté le 7 novembre 2026.
- 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.