NUMERIQUE ET SCIENCES INFORMATIQUESN.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 - 1tab[milieu] < val, alors fin reste inchangée, et debut devient égale à milieu + 1False.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