Adloun

NSI (terminale) · Chapitre 10 · Exercice d'entraînement

Tester une dichotomie contre une version naïve

Modularité, mise au point et tests · Jeux de tests · niveau 3 (difficile)

Énoncé

Tester une dichotomie contre une version naïve. On veut tester la fonction suivante, qui cherche x dans une liste t triée par ordre croissant.


def recherche_dicho(t, x):
    """Precondition : t est triee par ordre croissant.
    Renvoie un indice i tel que t[i] == x, ou -1 si x n'est pas dans t."""
    g, d = 0, len(t) - 1
    while g <= d:
        m = (g + d) // 2
        if t[m] == x:
            return m
        elif t[m] < x:
            g = m + 1
        else:
            d = m - 1
    return -1
  • Écrire une fonction test_cas_limites() contenant au moins six assertions : liste vide, liste à un élément (présent ou absent), valeur en première et en dernière position, valeur absente plus petite que tout, plus grande que tout, ou comprise entre deux valeurs.
  • La postcondition ne fixe pas quel indice renvoyer quand x apparaît plusieurs fois. Comment écrire une assertion qui reste juste dans ce cas ?
  • Écrire une fonction test_aleatoire(n) qui fabrique n listes triées aléatoires (module random) et compare, pour chacune, le résultat de recherche_dicho à celui du test x in t, dont on est sûr.
  • Un élève remplace while g <= d par while g < d. Donner un test de la question 1 qui détecte l'erreur.

Un exercice à chercher : son corrigé n'est pas publié. Sur Adloun, le tuteur guide par questions, sans donner la réponse.

Exercices semblables

Le cours du chapitre · Tous les exercices du chapitre