Skip to content
Snippets Groups Projects
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)