N.B. Niveau : Terminale Générale, enseignement de spécialité NSI (Numérique et Sciences Informatiques)
Des élèves ont fabriqué un oeuf synthétique et veulent tester sa résistance à la chute : ils veulent savoir à partir de quel étage de leur lycée, l'oeuf se brise. Leur lycée compte 64 étages. On suppose que l'oeuf ne se casse pas si on le lance du rez-de-chaussée, mais qu'il se casse du dernier étage, et que l'on dispose d'autant d'oeufs que l'on veut.
Dans l'exemple introductif, le paramètre est le nombre d'étages, que nous noterons n.
2 p-1 < n ≤ 2 p
. La complexité de la méthode 2 est alors p + 1
. Cette complexité
est logarithmique.L'algorithme de recherche dichotomique (ou recherche par dichotomie) algorithme s'applique dans le cas où on veut chercher si une valeur apparaît dans un tableau trié.
Le principe de l'algorithme est le suivant :
En pratique :
On suppose qu'on dispose d'un tableau trié représenté par la variable tab dans lequel on recherche une valeur val. Pour mette en oeuvre l'algorithme, on passe par deux variables, notées debut et fin et qui représentent l'indice de début et l'indice de fin de la partie du tableau dans lequel on recherche la valeur.
On procède alors de la façon suivante :
debut = 0
et fin = len(tab) - 1
.debut ≤ fin
, on répète les instructions suivantes :
milieu = (debut + fin) // 2
,tab[milieu]
et val
,True
, sinon on met à jour la valeur des variables debut
et fin
:tab[milieu] > val
, alors debut
reste inchangée, et fin
devient égale à milieu - 1
tab[milieu]
< val
, alors fin
reste inchangée, et debut
devient égale à milieu + 1
False
.Remarque :
fin - debut
décroît d'au moins une unité. Comme au départ on a
fin - debut = len(tab) - 1
, au bout d'au plus len(tab)
itérations, fin - debut
devient égal à -1
,
et la boucle se termine. On vient de prouver que l'algorithme se termine, ce que l'on appelle la terminaison
de l'algorithme.fin - debut
est à peu près divisé par deux. La complexité de la recherche dichotomique
dans un tableau trié est logarithmique.À faire :
recherche_dichotomique
qui :
tab
trié dans l'ordre croissant et une valeur val
,val
est dans tab
, et retourne True
si oui et False
si non.Par exemple :
recherche_dichotomique([], 3)
doit retourner False
recherche_dichotomique([2, 4, 5, 6, 10, 20, 30], 3)
doit retourner False
recherche_dichotomique([2, 3, 4, 5, 6, 10, 20, 30], 3)
doit retourner True
True
si ce tableau est trié dans l'ordre croissant et False
sinon.assert est_trie(tab), "Le tableau en paramètre doit être trié !"
Fond : Texte : Tables : Thème Python:
Contenu sous licence CC BY-NC-SA 3.0
Amandine SCHRECK
MAJ : 15/08/2022