C17.1 : Algorithme naïf
Présentation
Considérons deux chaines de caractères : un Texte T et un motif M
On souhaite déterminer si M est présent dans T, ainsi que les positions correspondantes.
Remarque :
Il s'agit ici de reprogrammer la fonction, donc sans utiliser :
- - le test d'appartenance
in, - - la méthode
indexdes chaines de caractères, - - l'extractin d'une sous-chaine d'une chaine avec les slices
[ : ].
Algorithme naïf
1. Proposer une fonction recherche_naif(M:str, T:str)->list qui permet de répondre à l'objectif.
2. On s'intéresse au pire cas.
2.a. Estimer, dans le pire cas, le coût de votre algorithme en fonction de la longueur t de T et m de M.
2.b. Donner un exemple de pire cas.
Quelques petites variantes possibles
Commencer par le dernier caractère de M
1. Modifier le code précédent en commençant la comparaison des lettres du motif avec les lettres du texte par la fin du motif.
2.a. Le coût de cette nouvelle version, dans le pire cas, est-il amélioré ?
2.b. Donner un exemple de pire cas pour cet algorithme.
Cas où l'on ne recherche que la première occurrence
Proposer une nouvelle version recherche_occ1_naif(M:str, T: str) -> int de la fonction qui renvoie un entier correspondant à la position de la première occurrence de M dans T ou None si M n'est pas dans T.