-
Sania Mekchiche authoredSania Mekchiche authored
tp_2_miso_dict.py 2.61 KiB
import matplotlib.pyplot as plt
import numpy as np
import time
import sys
###### PARTIE 2 ######
def experiment_load_factor(load_factors): #= load_factor = liste de facteur de charge
"""
Étude du facteur de charge
"""
insertion_times=[]
num_resizes = []
sizes = []
for i in load_factors:
dict = {}
num_elements= 0 #nombre d'élement dans table
num_resize = 0 #taille dico
last_size = sys.getsizeof(dict) #taile dico après insertion
start_time = time.time() # tps avant insertion
while num_elements < load_factors: #remplie table tant que taille attendue par facteur de charge pas atteint
dict[num_elements]=num_elements
num_elements =+ 1
last_size = sys.getsizeof(dict)
num_resize =+ 1 #on ajoute 1 élement donc 1 position en +
end_time = time.time() #temps fin insertion
insertion_times.append(end_time - start_time) #temps totale
sizes.append(last_size) #on ajoute la nouvelle taille dans la liste
num_resizes.append(num_resize) #nouvelle table
return insertion_times, num_resizes, sizes
def experiment_longest():
"""
TODO: cette focntion apour objectif de créer un dictionnaire, à partir d'une valleur de départ,
pour chaque iteration, elle associé une clé qui est la chaine de caractère de la valeur. A chaque insertion, le temps
est ajouté est mésuré et est stocké dans une variable.
A la fin un histogramme est créer et stocké dans un histogramme.
"""
d = {}
insertion_times = []
for i in range(10000):
key = str(i)
value = i
start_time = time.time()
d[key] = value
insertion_time = time.time() - start_time
insertion_times.append(insertion_time)
frequencies = np.histogram(insertion_times)[0]
return frequencies
def visualisation(load_factors, insertion_times, num_resizes, sizes, frequencies):
"""
Visualisation des résultats
"""
# Temps d'insertion en fonction du facteur de charge
# Nombre de réallocations de mémoire en fonction du facteur de charge
# Taille de mémoire occupée en fonction du nombre d'éléments
# Deuxième étude
f = list()
plt.figure(figsize=(10, 6))
plt.bar(range(len(f)), f)
plt.xlabel('Temps d\'insertion (s)')
plt.ylabel('Fréquence')
plt.title('Histogramme des fréquences des temps d\'insertions')
plt.yscale('log')
xticks = np.logspace(-6, 1, 3)
xtick_labels = [f'{x:.1e}' for x in xticks]
plt.xticks(xticks, xtick_labels)
plt.savefig('histogramme.png')
load_factors = [0.01, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
insertion_times, num_resizes, sizes = experiment_load_factor(load_factors)
frequencies = experiment_longest()
visualisation(load_factors, insertion_times, num_resizes, sizes, frequencies)