Écrire sommes prefixes(t) , qui rend le tableau des sommes des i…
Exercice de TD · niveau 2 · NSI (première), chapitre 7 — Parcourir, trier, prouver · Parcourir et prouver
Énoncé
Écrire sommes_prefixes(t), qui rend le tableau des sommes des premiers éléments, pour de à . Donner son invariant, et l'usage qui justifie de la calculer.
Corrigé
def sommes_prefixes(t):
"""Tableau p tel que p[i] soit la somme des i premiers éléments.
Postcondition : len(p) == len(t) + 1, p[0] == 0, et
p[i+1] - p[i] == t[i] pour tout i.
"""
p = [0]
for x in t:
p.append(p[-1] + x)
return p
sommes_prefixes([3, 1, 4, 1, 5]) # [0, 3, 4, 8, 9, 14]
L'invariant. Après avoir traité les premiers éléments, p a cases et p[k] vaut la somme de t[0..k-1] pour tout . L'initialisation pose p = [0] : la somme de zéro élément vaut , ce qui est l'élément neutre de l'addition — et c'est pourquoi le tableau a une case de plus que t.
L'usage. La somme d'une tranche quelconque se lit alors par une soustraction :
Un précalcul linéaire, et toute somme de tranche coûte ensuite une opération au lieu de . C'est le même marché que le dictionnaire du chapitre 5 : payer un parcours une fois pour répondre instantanément mille fois.
La vérification. Sur tableaux tirés au hasard, on a testé toutes les tranches de chacun :
assert all(p[j] - p[i] == sum(t[i:j])
for i in range(len(t) + 1) for j in range(i, len(t) + 1))
cas passent, tranches vides comprises — pour lesquelles la formule donne , ce qui est juste.
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.