Voici une façon de mesurer la durée d'exécution des programmes.
time() fournit le nombre de secondes écoulées deuis le 1er janvier 1970
Le 1er janvier 2021, la durée était de 51 ans, soit environ 51×365.25×86400 =1 609 437 600
secondes.
Aujourd'hui, le 27 janvier 2021; time() donne environ 1 611 767 583 : ça semble corrrect.
import time
time.time()
import time
instant_debut = time.time()
# le programme
duree = time.time() - instant_debut
print("Temps d'execution : ", duree, "secondes")
def puissance_n(x,n):
# retourne x à la puissance n
p = 1
for i in range(n):
p = x*p
return p
puissance_n(2,10)
import time
instant_debut = time.time()
puissance_n(10,200000)
duree1 = time.time() - instant_debut
print("Temps d'execution : ", duree1, "secondes")
def puissance_rapide(x,n):
# retourne x à la puissance n mais plus vite
if n == 1:
return x
else:
if n%2 ==0:
p = puissance_rapide(x,n/2)
return p*p
else:
p = puissance_rapide(x,(n-1)/2)
return p*p*x
puissance_rapide(2,10)
import time
instant_debut = time.time()
puissance_rapide(10,200000)
duree2 = time.time() - instant_debut
print("Temps d'execution : ", duree2, "secondes")
duree1/duree2
$P(x)= 9x^5 + 8x^4 + 7x^3 + 6x^2 + 5x + 4$
pol1 : évaluation bête
pol 2 : évaluation par $P(x) = 4+x(5+x(6+x(7+x(8+9x))))$
import time
def pol1(x):
return 9*x**5 + 8*x**4 + 7*x**3 + 6*x**2 + 5*x + 4
def pol2(x):
return 4+x*(5+x*(6+x*(7+x*(8+9*x))))
pol1(50),pol2(50)
n = 10**5
instant_debut = time.time()
for i in range(n):
pol1(i)
duree_pol1 = time.time() - instant_debut
print("Temps d'execution pour pol1 : ", duree_pol1, "secondes")
instant_debut = time.time()
for i in range(n):
pol2(i)
duree_pol2 = time.time() - instant_debut
print("Temps d'execution pour pol2 : ", duree_pol2, "secondes")
duree_pol1/duree_pol2
import time
def quadratique(n):
s = 0
for i in range(n):
for j in range(n):
s = s + 1
return s
quadratique(10**3)
p = 5
y1 = []
n = [100 + 100*i for i in range(p)]
for i in n:
instant_debut = time.time()
quadratique(i)
duree = time.time() - instant_debut
y1 = y1 + [duree]
print(y1)
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.set_title('Titre')
line1, = ax.plot(n, y1,'o', lw=2, label='n au carré')
#plt.xscale('log')
leg = ax.legend(fancybox=True, shadow=True)
def cubique(n):
s = 0
for i in range(n):
for j in range(n):
for k in range(n):
s = s + 1
return s
quadratique(10**2)
p = 5
y2 = []
n = [100 + 100*i for i in range(p)]
for i in n:
instant_debut = time.time()
cubique(i)
duree = time.time() - instant_debut
y2 = y2 + [duree]
print(y2)
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.set_title('Titre')
line2, = ax.plot(n, y2, 'o', lw=2, label='n au cube')
#plt.xscale('log')
leg = ax.legend(fancybox=True, shadow=True)
import matplotlib.pyplot as plt
def f12(x):
return 8.86*10**(-8) * x**2 - 6.692*10**(-6)*x -2.06*10**(-4)
y12 = [f12(k) for k in n]
fig, ax = plt.subplots()
ax.set_title('Titre')
line1, = ax.plot(n, y1,'o', lw=2, label='n au carré')
line2, = ax.plot(n, y2, 'o', lw=2, label='n au cube')
#plt.xscale('log')
leg = ax.legend(fancybox=True, shadow=True)