Adloun

Compter les tours d'une dichotomie

Exercice · niveau 1 (application) · mathématiques appliquées (ECG 1re année), chapitre 11 — Informatique et algorithmique · Dichotomie et approximation numérique

Énoncé

Modifier recherche_dichotomique pour qu'elle renvoie le nombre de tours effectués. Vérifier sur une liste de éléments qu'il est de l'ordre de .

Corrigé


def dichotomie_comptee(L, x):
    a, b, tours = 0, len(L) - 1, 0
    while a <= b:
        tours = tours + 1
        m = (a + b) // 2
        if L[m] == x:
            return m, tours
        elif L[m] < x:
            a = m + 1
        else:
            b = m - 1
    return -1, tours

Sur L = list(range(1000)), on observe au plus tours, et exactement pour une valeur absente (le pire cas). Pour , la réponse tombe au premier tour.

Pourquoi . Chaque tour divise par deux le nombre de candidats : après tours il en reste au plus . La boucle s'arrête quand ce nombre atteint , donc quand , soit . Ici , d'où .

L'ordre de grandeur. Sur un million d'éléments, tours ; sur un milliard, . La recherche séquentielle en demanderait respectivement un million et un milliard. C'est la différence entre et — et elle est achetée par une hypothèse, la liste triée.

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.