On va vérifier expérimentalement l'ordre de grandeur de la complexité du tri fusion
Après avoir défini les fonctions fusion(L1,L2) et tri_fusion(L), on va mesurer le temps d'exécution de la fonction tri_fusion(L) sur des listes de tailles 1000,100 000 et 1 000 000, dont les éléments sont des entiers
NB_TERMES = 1000
L = [i for i in range(NB_TERMES)]
random.shuffle(L)
t1 = time()
tri_fusion(L)
t2 = time()
print(t2-t1)
Compléter le tableau suivant
$n$ | $10^3$ | $10^5$ | $10^6$ |
---|---|---|---|
$T$ |
En admettant que $\ln_2(kn) = \ln_2(k)+\ln_2(n)$
Justifier que $k \leqslant \dfrac{kn\ln_2(kn)}{n\ln_2(n)} \leqslant 2k$
On adapte le code vue en cours en tenant compte du repérage des pixels dans une image
Télécharger lena.png une image en couleurs au format png
from PIL import Image
import time
def translation(im,x,y,t):
"""
im est une image carré dont le côté est une puissance de 2
x,y les indices du pixel du coin supérieur gauche de la zone à traiter
Le repérage est celui habituel pour les images
t le côté de la zone à traiter un multiple de 2 >= 2
le carré défini par x,y et x+t,y+t est divisé en 4 carrés HG,HD,BG et BD
On translate BG -> HG, HG -> HD, HD -> BD et BD -> BG
"""
for i in range(t//2):
for j in range(t//2):
temp = im.getpixel((x+i,y+j))
im.putpixel((x+i,y+j),im.getpixel((x+i,y+j+t//2)))
im.putpixel((x+i,y+j+t//2),im.getpixel((x+i+t//2,y+j+t//2)))
im.putpixel((x+i+t//2,y+j+t//2),im.getpixel((x+i+t//2,y+j)))
im.putpixel((x+i+t//2,y+j),temp)
def quart_tour(im,x,y,t):
if t > 1:
quart_tour(im,x,y,t//2)
quart_tour(im,x,y+t//2,t//2)
quart_tour(im,x+t//2,y+t//2,t//2)
quart_tour(im,x+t//2,y,t//2)
translation(im,x,y,t)
image = Image.open("lena.png")
t1 = time.time()
quart_tour2(image,0,0,512)
t2 = time.time()
print(t2-t1)
image.show()
Adapter l'autre fonction vue en cours