import numpy as np
import matplotlib
import matplotlib.pyplot as plt
def instructionSimple(n):
cnt = 0
cnt += 1
return cnt
samples = range(1,1000,10)
C0 = [ instructionSimple(i) for i in samples]
plt.title('Complexité constante')
plt.plot(samples,C0)
plt.show()
def boucleSimple(n):
cnt = 0
for i in range(0,n):
cnt += 1
return cnt
C1 = [ boucleSimple(i) for i in samples]
plt.title('Complexité linéaire')
plt.plot(samples,C1)
plt.show()
def bouclesImbriquees(n):
cnt = 0
for i in range(0,n):
for j in range(0,n):
cnt += 1
return cnt
C2 = [ bouclesImbriquees(i) for i in samples]
plt.title('Complexité quadratique')
plt.plot(samples,C2)
plt.show()
plt.title('Complexités constante, linéaire et quadratique')
plt.loglog(samples,C2,label='boucles imbriquées')
plt.loglog(samples,C1,label='boucle simple')
plt.loglog(samples,C0,label='instruction simple')
plt.legend()
plt.show()
def enchainement(n):
cnt = 0
cnt += 1
for i in range(0,n):
cnt += 1
for i in range(0,n):
for j in range(0,n):
cnt += 1
return cnt
C3 = [ enchainement(i) for i in samples ]
plt.title('Complexité de l\'enchainement')
plt.loglog(samples,C3,label='enchainement')
plt.loglog(samples,C2,label='boucles imbriquées')
plt.loglog(samples,C1,label='boucle simple')
plt.loglog(samples,C0,label='instruction simple')
plt.legend()
plt.show()
def triangle(n):
cnt = 0
for i in range(0,n):
for j in range(0,i):
cnt += 1
return cnt
C4 = [ triangle(i) for i in samples ]
plt.title('Complexité de la boucle triangulaire')
plt.loglog(samples,C4,label='triangle')
plt.loglog(samples,C2,label='boucles imbriquées')
plt.loglog(samples,C1,label='boucle simple')
plt.legend()
plt.show()
def logarithmique(n):
cnt = 0
while n >= 1:
cnt += 1
n /= 2
return cnt
C5 = [ logarithmique(i) for i in samples ]
plt.title('Complexité logarithmique')
plt.plot(samples,C5,label='logarithmique')
plt.plot(samples,C1,label='linéaire')
plt.plot(samples,C0,label='constante')
plt.ylim(0,20)
plt.legend()
plt.show()
def linearithmique(n):
cnt = 0
for i in range(0,n):
j = n
while j >= 1:
cnt += 1
j /= 2
return cnt
C6 = [ linearithmique(i) for i in samples ]
plt.title('Complexité linéarithmique')
plt.loglog(samples,C6,label='linéarithmique')
plt.loglog(samples,C2,label='quadratique')
plt.loglog(samples,C1,label='linéaire')
plt.loglog(samples,C0,label='constante')
plt.legend()
plt.show()
import random
def alternatif(n):
cnt = 0
for i in range(n):
if random.randint(0,n) == 0:
for j in range(n):
cnt += 1
else:
cnt += 0
return cnt
C7 = [ 0 for i in samples ]
nrTests = 20
for test in range(0,nrTests):
C7 = [ c7 + alternatif(i) / nrTests for i,c7 in zip(samples,C7) ]
plt.title('Complexité enchainement alternatif')
plt.loglog(samples,C7,label='alternatif')
plt.loglog(samples,C1,label='linéaire')
plt.legend()
plt.show()
def alternatif2(n):
cnt = 0
p2 = 1
for i in range(0,n):
if i == p2:
for j in range(0,p2):
cnt += 1
p2 *= 2
return cnt
C8 = [ alternatif2(i) for i in samples ]
plt.title('Complexité enchainement alternatif')
plt.loglog(samples,C8,label='alternatif2')
plt.loglog(samples,C1,label='linéaire')
plt.legend()
plt.show()