Vous êtes sur la page 1sur 3

Algorithmique 

: Recherche textuelle
Algorithme de Boyer-Moore-Horspool
Dans la première partie, vous avez découvert la méthode prédéfinie find en Python et vous avez
appris à l’utiliser. Ensuite, l’objectif a été de comprendre comment implémenter une telle fonction
en Python, à l’aide d’un algorithme de recherche textuelle naïve.

Exercice 3 :
1. Expliquer pourquoi il est plus facile de trouver un mot dans un texte qu’une séquence dans une
chaîne d’ADN (proposer plusieurs axes d’accélération de la recherche).
2. Quelles améliorations de l’algorithme de recherche textuelle naïve pourriez-vous proposer ?

3. L’algorithme de Boyer-Moore-Horspool

3.1. Historique

L’algorithme de Boyer-Moore-Horspool est un algorithme de recherche de sous-chaîne publié en


1980 par Nigel Horspool, un professeur de l’université de Victoria au Canada.
Il consiste en une simplification de l’algorithme de Boyer-Moore, algorithme de recherche de sous-
chaîne extrêmement efficace, développé par R.S. Boyer et J.S. Moore en 1977.

3.2. Découverte

Exercice 4 :
1. Visionner les 8 premières minutes de cette vidéo, puis répondez aux questions suivantes.
2. Quelles sont les principales différences entre l’algorithme de recherche naïve et l’algorithme de
Boyer-Moore-Horspool  ?
3. Donner une formule permettant de calculer les sauts correspondants à chaque lettre.
4. Compléter les tables de sauts suivantes (ne remplir que les cellules nécessaires):

Motif BRAVO
Lettres O et autres lettres B R A V
Saut

Motif MOORE
Lettres
Saut

Motif ROGER
Lettres
Saut
3.3. Prétraitement : création de la table de sauts

Exercice 5 :
1. Ecrire une fonction table_sauts qui prend en argument une chaîne de caractères : le motif et qui
renvoie un dictionnaire dont les clés seront les lettres du motif et les valeurs seront les sauts
associés.
2. Tester votre fonction. Vous pourrez, entre autre, utiliser les résultats reproduits ci-dessous.

3.4. Implémentation d l’algorithme de Boyer-Moore-Horspool

Exercice 6 :
1. Implémenter une fonction BMH, qui prend en argument 2 chaînes de caractères : texte et motif et
qui renvoie une liste des positions du motif dans le texte. L’algorithme à programmer est décrit ci-
dessous :

2. Tester votre programme sur différents textes ou chaînes et différents motifs


4. Gain de temps ?

4.1. Mesure du temps de recherche par la méthode naïve

Exercice 7 :
A l’aide de la fonction time de la bibliothèque time, évaluer le temps nécessaire pour établir la liste
des occurrences du motif ‘ACG’ dans le brin d’ADN fourni au début du TD précédent à l’aide de
l’algorithme de recherche naïve.

4.2. Mesure du temps de recherche par la méthode Boyer-Moore-Horspool

Exercice 8 :
A l’aide de la fonction time de la bibliothèque time, évaluer le temps nécessaire pour établir la liste
des occurrences du motif ‘ACG’ dans le brin d’ADN fourni au début du TD précédent à l’aide de
l’algorithme de Boyer-Roger-Moore.

4.3. Comparaison des temps de recherche sur un autre texte

Exercice 9 :
Mesurer les temps de recherche du motif ‘le’ dans le texte contenu dans le fichier la_disparition.txt.
Commentez vos résultats.

Vous aimerez peut-être aussi