Adloun

Combien de tours au maximum pour un tableau de éléments

Exercice de TD · niveau 2 · NSI (première), chapitre 8 — Dichotomie, voisins et gloutons · La recherche dichotomique

Énoncé

Combien de tours au maximum pour un tableau de éléments ? de ? Répondre avec le nombre de bits du chapitre 1, puis vérifier la réponse en comptant les tours pour toutes les valeurs cherchées.

Corrigé

La réponse théorique. Le nombre de tours du pire cas est , c'est-à-dire le nombre de bits de : pour , pour , pour .

La vérification, qui n'est pas une reformulation.


def tours_max(n):
    """Nombre de tours du pire cas, MESURE sur toutes les valeurs possibles."""
    t = list(range(n))
    pire = 0
    for v in range(-1, n + 1):          # toutes les presentes ET deux absentes
        _, trace = dichotomie_tracee(t, v)
        pire = max(pire, len(trace))
    return pire

for n in [1, 2, 3, 7, 8, 100, 1000, 1024]:
    assert tours_max(n) == n.bit_length()

assert (10**6).bit_length() == 20
assert (10**9).bit_length() == 30

La boucle essaie toutes les valeurs, présentes comme absentes : c'est ce qui en fait une mesure du pire cas et non d'un cas particulier. Le résultat coïncide exactement avec n.bit_length() — la fonction du chapitre 1, retrouvée ici par un tout autre chemin. Ce n'est pas une coïncidence : diviser par deux jusqu'à atteindre , c'est compter les chiffres binaires.

Le contraste avec la recherche séquentielle vaut d'être dit en une phrase : passer de à éléments multiplie le travail séquentiel par mille, et fait passer la dichotomie de à tours.

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.