Adloun

mathématiques appliquées (ECG 1re année) · Chapitre 11 · Exercice

Compter les tours d'une dichotomie

Informatique et algorithmique · Dichotomie et approximation numérique · niveau 1 (application)

É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 jusqu'à pour une valeur absente (le pire cas, atteint pour ). 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.

Exercices semblables

Le cours du chapitre · Tous les exercices du chapitre