This page was exported from Enseignement de l'informatique et du numérique au lycée Boissy d'Anglas
[ https://icn-isn-boissy.yj.fr/wp ] Export date: Fri Apr 18 5:54:53 2025 / +0000 GMT |
||||||
Recherche textuelleProgramme officiel
La recherche d'une sous-chaine a des applications importantes en informatiques, par exemple dans les moteurs de recherche. Nous commencerons par une application naïve puis nous verrons qu'il est bien plus efficace de faire la recherche en sens inverse en partant du dernier caractère du mot pour ne pas tester toutes les positions. Nous allons visualiser la vidéo ci-dessous et effectuer les implémentation sous python en mettent la vidéo en pause, les solutions des programme python sont données plus loin dans l'article. Algorithme naïfNous allons appliquer une méthode itérative brute pour rechercher une sous-chaine dans une chaine de caractères. Nous allons avancer dans le texte caractère par caractère, puis si le caractère considéré correspond au premier caractère du mot, nous comparerons les caractères suivants à ceux du mot. si la recherche s'avère fructueuse on renvoie implémentation algorithme naïf python corrigé L'exécution est relativement lente, la fonction doit tester N-n positions dans La complexité de cet algorithme est dans le pire des cas O ((N−n)×n), c'est une complexité quadratique O(N2) car souvent N>>n. Nous allons voir qu'il est beaucoup plus efficace de faire la recherche à l'envers à partir de la fin du mot. L'algorithme de Boyer-Moore : version simplifiée de HorspoolNous allons étudier une version simplifiée du meilleur algorithme connu : l'algorithme de Boyer-Moore qui a été proposé par Nigel Horspool. Cet algorithme repose sur deux idées :
Déroulement de l'algorithmeNous considérons ici la recherche du motif On commence la recherche à l'index 2 :
Il n'y a pas de correspondance à la fin du mot : On recherche donc à l'indice 2 + 3 = 5 :
Il n'y a pas de correspondance à la fin du mot : On recherche donc à l'indice 5 + 1 = 6 :
Il n'y a pas de correspondance à la fin du mot : On recherche donc à l'indice 6 + 2 = 8 :
Maintenant lorsqu'on effectue les comparaisons à l'envers : les Implémentation en PythonPour implémenter efficacement cet algorithme, on va passer par un pré-traitement du nom pour facilement accéder au décalage à effectuer. On utilise un dictionnaire pour cela. Implémentation du pré-traitement python corrigé. Maintenant la fonction de recherche : |
||||||
Post date: 2021-03-18 09:16:52 Post date GMT: 2021-03-18 08:16:52 Post modified date: 2024-12-06 10:45:16 Post modified date GMT: 2024-12-06 09:45:16 |
||||||
Powered by [ Universal Post Manager ] plugin. HTML saving format developed by gVectors Team www.gVectors.com |