NSI (première) · Chapitre 4 · Exercice de TD
Écrire couples(t), qui renvoie le tableau de tous les couples avec
Les types construits · Tableaux et compréhensions · niveau 3 (difficile)
Énoncé
Écrire couples(t), qui renvoie le tableau de tous les couples avec . Combien y en a-t-il ? Le vérifier. Que dire du coût de cette fonction, et de la place qu'occupe son résultat ?
Corrigé
def couples(t):
"""Tous les couples (t[i], t[j]) avec i < j, dans l'ordre des indices.
Postcondition : le resultat a n(n-1)/2 elements, ou n = len(t).
"""
n = len(t)
r = [(t[i], t[j]) for i in range(n) for j in range(i + 1, n)]
assert len(r) == n * (n - 1) // 2
return r
La compréhension à deux for se lit de gauche à droite comme deux boucles imbriquées : le premier est la boucle extérieure. Le range(i + 1, n) du second dépend du du premier — c'est ce qui impose sans le moindre if.
Le décompte. Choisir deux indices distincts parmi , sans tenir compte de l'ordre : il y en a . Autrement dit : choix pour , puis pour , et l'on divise par car et désignent la même paire.
Vérification.
assert couples([1, 2, 3]) == [(1, 2), (1, 3), (2, 3)]
assert couples([]) == []
assert couples([5]) == []
for n in range(0, 40):
assert len(couples(list(range(n)))) == n * (n - 1) // 2
Les cas limites sont instructifs : un tableau vide comme un tableau à un seul élément ne fournissent aucune paire, et la formule le dit — et .
Le coût, et la place. Les deux boucles imbriquées font tours : le coût croît comme le carré de . Pour , c'est déjà couples ; pour , ce serait cinq milliards — le programme ne finirait pas, et surtout la mémoire ne suffirait pas. Ici le résultat lui-même est quadratique, et c'est bien plus grave qu'un calcul quadratique : on ne peut pas ranger cinq milliards de couples, quel que soit le temps qu'on y consacre. Quand une fonction construit tous les couples, la question n'est pas « combien de temps ? » mais « où va-t-on les mettre ? ».
100 % gratuit
Essaie le suivant avec le tuteur
- L'exercice suivant avec le tuteur, sans compte : il guide pas à pas, sans donner la réponse
- 16 autres exercices corrigés dans ce chapitre, et 20 à chercher avec le tuteur
- Le podcast et la vidéo du chapitre et la correction filmée du TD : 2 minutes sans compte
Sans compte : le cours, 2 minutes de podcast et de vidéo et un exercice avec le tuteur. Pour tout le reste : inscription gratuite en 30 secondes, sans carte bancaire.