Adloun

Écrire minimum et maximum(t) en un seul parcours, renvoyant un couple

Exercice de TD · niveau 3 (difficile) · NSI (première), chapitre 7 — Parcourir, trier, prouver · Parcourir et prouver

Énoncé

Écrire minimum_et_maximum(t) en un seul parcours, renvoyant un couple. Combien de comparaisons effectue-t-elle ? Peut-on faire mieux que ?

Corrigé


def minimum_et_maximum(t):
    """Couple (plus petit, plus grand) en un seul parcours.

    Précondition  : t est non vide.
    Postcondition : mini <= x <= maxi pour tout x de t, et mini et maxi
                    appartiennent tous deux à t.
    """
    assert len(t) > 0, "tableau vide"
    mini = maxi = t[0]
    for i in range(1, len(t)):
        if t[i] < mini:
            mini = t[i]
        else:
            if t[i] > maxi:
                maxi = t[i]
    return mini, maxi

L'invariant tient en une phrase : avant le tour , mini et maxi sont le plus petit et le plus grand élément de t[0..i-1]. L'initialisation à t[0] — et non à une constante — est ce qui rend l'invariant vrai au départ, et c'est l'avertissement du cours.

Le décompte. Le else est essentiel : si t[i] est plus petit que le minimum, il ne peut pas être plus grand que le maximum, et la seconde comparaison est inutile. Le coût dépend donc du contenu :

Peut-on faire mieux ? Oui : . On traite les éléments par paires. Une comparaison range les deux membres de la paire ; le plus petit ne peut alors concourir que pour le minimum, le plus grand que pour le maximum. Trois comparaisons par paire, soit par élément, au lieu de .

un par unpar paires

Les deux versions ont été comparées sur tableaux tirés au hasard : elles rendent toujours le même couple, et le même que (min(t), max(t)).

Ce que cela vaut, honnêtement. On passe de à : le gain est d'un quart, il ne change pas la loi — les deux restent linéaires. On peut démontrer qu'aucun algorithme ne descend sous comparaisons ; c'est donc l'optimum, et c'est un résultat de terminale.

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.