Adloun

Mesurer, avec time.perf counter , le temps mis par la somme des…

Exercice supplémentaire · niveau 2 · NSI (première), chapitre 3 — Langages et programmation · Tester autrement : doctest, assertions, mesures

Énoncé

Mesurer, avec time.perf_counter, le temps mis par la somme des entiers de à calculée par boucle, puis par la formule . Que mesure-t-on exactement, et quelles précautions la mesure impose-t-elle ?

Corrigé


import time

def somme_lente(n):
    s = 0
    for i in range(1, n + 1):
        s = s + i
    return s

def somme_rapide(n):
    return n * (n + 1) // 2

N = 2 * 10**6
t0 = time.perf_counter(); a = somme_lente(N);  t1 = time.perf_counter()
b = somme_rapide(N);                           t2 = time.perf_counter()
assert a == b
print("boucle  : %.3f s" % (t1 - t0))          # 0.051 s
print("formule : %.6f s" % (t2 - t1))          # 0.000002 s

Sur la machine de rédaction : seconde contre deux microsecondes. Le rapport est de l'ordre de .

Ce que l'on mesure exactement. Le temps écoulé sur cette machine, avec cet interpréteur, à cet instant. Ce n'est pas une propriété de l'algorithme : c'est une observation. Les chiffres ci-dessus ne se reproduiront pas à l'identique chez vous.

Les précautions.

Ce que la mesure ne dit pas : pourquoi. La boucle fait additions, la formule en fait trois — c'est cela, l'explication, et elle se raisonne sans chronomètre. La mesure confirme, elle ne démontre pas. Le comptage des opérations est l'objet du chapitre 7.

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.