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