From 374ba3b0b3d64f7434f05f0335c746fb58678cd1 Mon Sep 17 00:00:00 2001 From: "sania.mekchiche.etu" <sania.mekchiche.etu@univ-lille.fr> Date: Sun, 9 Mar 2025 02:46:37 +0100 Subject: [PATCH] fini1 --- TP2_hachage/tp_2_miso_dict.py | 143 ++++++++++++++++++++-------------- 1 file changed, 86 insertions(+), 57 deletions(-) diff --git a/TP2_hachage/tp_2_miso_dict.py b/TP2_hachage/tp_2_miso_dict.py index b4fa921..4d8763c 100644 --- a/TP2_hachage/tp_2_miso_dict.py +++ b/TP2_hachage/tp_2_miso_dict.py @@ -2,80 +2,109 @@ import matplotlib.pyplot as plt import numpy as np import time import sys +import math -#test modif du push après peripétie + +# test modif du push après peripétie ###### PARTIE 2 ###### -def experiment_load_factor(load_factors): #= load_factor = liste de facteur de charge - """ +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 + insertion_times = [] + num_resizes = [] + sizes = [] + + for i in load_factors: + dico = {} + num_elements = 0 # nombre d'élement dans table + num_resize = 0 # taille dico + last_size = sys.getsizeof(dico) # taile dico après insertion + insertion_per_factor = [] + + while num_elements < (i * 100): # remplie table tant que taille attendue par facteur de charge pas atteint + start_time = time.perf_counter() + dico[num_elements] = num_elements + end_time = time.perf_counter() + insertion_per_factor.append(end_time - start_time) # temps totale + num_elements += 1 + current_size = sys.getsizeof(dico) + if current_size > last_size: + last_size = current_size + num_resize += 1 # on ajoute 1 élement donc 1 position en + + + insertion_times.append(np.mean(insertion_per_factor)) + sizes.append(last_size) # on ajoute la nouvelle taille dans la liste + num_resizes.append(num_resize) # nouvelle table + print(insertion_times) + 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 + 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') + # Temps d'insertion en fonction du facteur de charge + plt.figure(figsize=(10, 6)) + plt.bar(load_factors, insertion_times, width=0.01, label="insertion_time", color='blue') + plt.xlabel('load factor') + plt.ylabel('Temps d\'inserstion') + plt.title('Histogramme du temps des insertions en fonction des facteurs de charge') + plt.savefig('histogramme 7A') + # Nombre de réallocations de mémoire en fonction du facteur de charge + + plt.figure(figsize=(10, 6)) + plt.bar(load_factors, num_resizes, width=0.05, label="num_resize", color='green') + plt.xlabel('load factor') + plt.ylabel('num resize') + plt.title('Histogramme du nombre de reallocations de mémoire en fonction du facteur de charge') + plt.savefig('Histogramme 7B') + # Taille de mémoire occupée en fonction du nombre d'éléments + + plt.figure(figsize=(10, 6)) + plt.bar(sizes, num_resizes, width=100, color='red', + label="Nombre de réallocations") # Augmente width si valeurs élevées + plt.xlabel('size') + plt.ylabel('num_resizes') + plt.title('Histogramme de la taille de mémoire occupé en fonction du nombre d\'élements') + plt.savefig('Histogramme 7C') + + # Deuxième étude + f = list(frequencies) + 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) -- GitLab