# Exercices — Recherche textuelle ## 1. QCM 1. Quelle est la complexité de la recherche d'un caractère dans un texte de longueur n ? a. O(1) b. O(n) c. O(n²) 2. Dans l'algorithme de recherche naïve, si le texte a une longueur n et le motif une longueur m, combien de positions de départ sont testées au maximum ? a. n b. n - m c. n - m + 1 3. Quelle est la particularité de l'algorithme de Boyer-Moore par rapport à la recherche naïve ? a. Il compare les caractères de gauche à droite b. Il compare les caractères de droite à gauche c. Il ne fait aucune comparaison 4. À quoi sert le pré-traitement du motif dans l'algorithme de Morris-Pratt ? a. À trier les caractères du motif b. À calculer les décalages optimaux après un échec c. À compter le nombre de caractères différents 5. Dans le pire cas, quelle est la complexité de l'algorithme de recherche naïve ? a. O(n) b. O(m) c. O(n × m) --- ## 2. Questions de cours ### Question 1 On considère le texte `"abracadabra"` et le motif `"abra"`. a. Combien de positions de départ sont testées par l'algorithme naïf ? b. À quelles positions le motif est-il trouvé ? ### Question 2 Expliquez pourquoi l'algorithme de Boyer-Moore peut être plus efficace que la recherche naïve, notamment quand le motif est long. ### Question 3 On considère le code suivant : ```python def recherche(texte, motif): n = len(texte) m = len(motif) for j in range(n - m + 1): i = 0 while i < m and texte[j + i] == motif[i]: i = i + 1 if i == m: return j return -1 ``` a. Que renvoie `recherche("bonjour", "jour")` ? b. Que renvoie `recherche("bonjour", "soir")` ? c. Modifiez la fonction pour qu'elle renvoie **toutes** les positions où le motif apparaît (sous forme de liste). --- ## 3. Exercices de programmation ### Exercice 1 : Compter les occurrences Écrire une fonction `compter_occurrences(texte, motif)` qui renvoie le nombre de fois où le motif apparaît dans le texte. ```python >>> compter_occurrences("abracadabra", "a") 5 >>> compter_occurrences("abracadabra", "abra") 2 ``` ### Exercice 2 : Recherche insensible à la casse Écrire une fonction `recherche_insensible(texte, motif)` qui effectue une recherche en ignorant les majuscules/minuscules. ```python >>> recherche_insensible("Bonjour tout le Monde", "monde") 16 >>> recherche_insensible("PYTHON", "python") 0 ``` ### Exercice 3 : Analyse de complexité On exécute la recherche naïve avec le texte `"aaaaaaaaaa"` (10 fois 'a') et le motif `"aaab"`. a. Combien de comparaisons sont effectuées au total ? b. Expliquez pourquoi ce cas est défavorable pour l'algorithme naïf. ### Exercice 4 : Table des dernières occurrences (Boyer-Moore) Pour l'algorithme de Boyer-Moore, on construit une table indiquant la dernière position de chaque caractère dans le motif. Pour le motif `"EXEMPLE"`, construire cette table. --- Auteur : Florian Mathieu Licence CC BY NC Licence Creative Commons
Ce cours est mis à disposition selon les termes de la Licence Creative Commons Attribution - Pas d'Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International.