Tous distincts ?
Exercice · informatique (tronc commun des prépas scientifiques), chapitre 3 — Boucles imbriquées et complexité quadratique
Énoncé
Écrire une fonction tous_distincts(t) déterminant si tous les éléments de la liste t sont uniques, à l'aide d'une double boucle. Donner sa preuve de correction, sa complexité et la comparer avec la version utilisant un dictionnaire.
Corrigé
def tous_distincts(t: list) -> bool:
for i in range(len(t)):
for j in range(i + 1, len(t)):
# Invariant : aucun couple d'indices distincts visité avant (i, j) n'a de valeurs égales
if t[i] == t[j]:
return False
return True
- Correction : Si la fonction s'interrompt en renvoyant
False, c'est qu'elle a trouvé avec , ce qui valide la présence d'un doublon. Si elle termine les deux boucles, l'invariant final prouve l'absence de doublon. La bornei + 1évite de comparer un élément avec lui-même. - Complexité : Au pire, on effectue comparaisons, soit une complexité de .
- Comparaison : La méthode avec dictionnaire (chapitre 2) offre un coût de , mais requiert que les éléments soient hachables. La double boucle fonctionne dès que l'opérateur d'égalité
==est défini.
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.