Exo bac C7.EB1
On donne ci-dessous le code de la fonction de recherche dichotomique d'un élément dans une liste.
def rechercheDicho (elem, liste):
"""
Cette fonction indique si un élément se trouve dans un tableau.
Elle utilise la méthode de recherche dichotomique.
Elle prend en arguments :
- elem : élément à rechercher de type string ;
- liste : liste d'éléments de type string triée par ordre croissant.
Elle renvoie un booléen indiquant à la présence ou non de l'élément.
"""
deb = 0
fin = len(liste) - 1
m = (deb + fin) // 2
while deb <= fin:
if liste[m] == elem:
return True
elif liste[m] > elem:
fin = m - 1
else:
deb = m + 1
m = (deb + fin) // 2
return False
Partie A : La recherche dichotomique
1) La recherche dichotomique d'un élément dans un tableau ne peut se faire que si le tableau est trié.
[a] Vrai
[b] Faux
2) Le coût (la complexité) d'un algorithme de recherche dichotomique est :
[a] Constant O(1)
[b] Linéaire O(n)
[c] Logarithmique O(log(n))
3) Justifier pourquoi l'entier fin-deb est un variant de boucle qui montre la terminaison du programme de recherche dichotomique.
Partie B : La recherche dichotomique itérative
Dans l'ensemble de cette partie, on considère la liste : Lnoms = ["alice", "bob", "etienne", "hector", "lea", "nathan", "paul"].
1) Expliquer pourquoi à la ligne 11, on a « fin = len(liste) - 1 » plutôt que « fin = 6 ».
2) En Python, l'opérateur // donne le quotient de la division euclidienne de deux nombres entiers.
Proposer un algorithme pour obtenir ce quotient, sans utiliser l'opérateur //.
3) Donner la trace complète de l'exécution de rechercheDicho("lea", Lnoms) en complétant le tableau ci-dessous sur votre copie :
| Variables | Condition deb <= fin |
Valeur renvoyée | ||
| deb | fin | m | ||
4) Sur votre copie, modifier le code du corps de la fonction rechercheDicho() pourqu'elle renvoie aussi la position (l'indice) de l'élément cherché ou -1 si l'élément n'est pas trouvé.
Partie C : La recherche dichotomique récursive
1) Donner la définition d'une fonction récursive en programmation.
2) Écrire en langage naturel ou en python, l'algorithme de recherche dichotomique d'un élément dans une liste, triée de façon croissante, en utilisant une méthode récursive. Il renverra True si l'objet a été trouvé, False sinon.