From 6fc784b55e9d5f8851d0a428b112a8434f8b0d0b Mon Sep 17 00:00:00 2001 From: Pacome Riobe <pacome.riobe.etu@univ-lille.fr> Date: Thu, 27 Feb 2025 10:32:30 +0100 Subject: [PATCH] =?UTF-8?q?Partie=201=20termin=C3=A9e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tp_2_miso_mphf.py | 46 +++++++++++++++++++++++++++++++--------------- 1 file changed, 31 insertions(+), 15 deletions(-) diff --git a/tp_2_miso_mphf.py b/tp_2_miso_mphf.py index 5503f71..65748c4 100644 --- a/tp_2_miso_mphf.py +++ b/tp_2_miso_mphf.py @@ -54,12 +54,9 @@ def construction_mphf(set_kmer, n, gamma=2, nb_niveaux=3): collision = set() # on replace les positions non-hachées en tant que set pour le hachage # Construction de la MPHF - mphf = [] grand_tableau = [] for tableau in tableaux: grand_tableau.extend(tableau) # on ajoute tous les éléments de tous les tabeaux dans le tableau final, sans renvoyer de valeur - rangs = [] - max_rang = 0 count = 0 list_h_pos = [] for pos in range(len(grand_tableau)): @@ -121,9 +118,9 @@ def get_hash_mphf(mphf, kmer): hashkmer = abs(hash(kmer)) for hach in mphf: if hach[0] == hashkmer: - return hach[0] + return hashkmer else: - return "ça existe pô" + return "not in the table" def create_hash_table(set_kmer, n): @@ -147,7 +144,13 @@ def create_hash_table(set_kmer, n): >>> all(kmer in tableau for kmer in set_kmer) True """ - pass # TODO modifier + mphf = construction_mphf(set_kmer, n) + liste = [0] * n + n = 0 + for kmer in mphf: + liste[n] = kmer[0] + n += 1 + return liste, mphf # créer la mphf pour les kmers # initialiser un tableau de taille n (une liste) # écrire les kmers aux adresses du tableau données par la mphf @@ -166,20 +169,28 @@ def generer_kmers(n, k): def compare_taille(n_max, fichier_sortie): - n_values = [] - table_size = [] - dict_size = [] - k = 21 + """ + Crée un graphique de la taille de la table de hachage comparée à la taille d'un dictionnaire pour stocker jusqu'à n-max kmers + :param n_max: nombre maximum de kmers traités + :param fichier_sortie: chemin dans l'arborescence de fichiers pour récupérer le graphique + :return: outfile + """ + n_values = [] # table pour les plots + table_size = [] # table pour la mphf + dict_size = [] # table pour le dictionnaire + k = 21 # taille des kmers générés for n in range(100, n_max, 1000): - set_kmer = generer_kmers(n, k) - tableau, mphf = create_hash_table(set_kmer, n) + set_kmer = generer_kmers(n, k) # génération de jusqu'à n_max kmers + tableau, mphf = create_hash_table(set_kmer, n) # création de la table de hachage - n_values.append(n) + n_values.append(n) # valeurs de l'axe des abscisse table_size.append(sys.getsizeof(tableau) + sys.getsizeof( - mphf)) # pourquoi ici on ne mesure pas juste la taille en mémoire du tableau ? + mphf)) # pourquoi ici on ne mesure pas juste la taille en mémoire du tableau ? Car on a également besoin + # de garder en mémoire la mphf, à cause des collisions dict_size.append(sys.getsizeof(set_kmer)) + # création du plot plt.plot(n_values, table_size, label='Table avec MPHF') plt.plot(n_values, dict_size, label='Dict') plt.xlabel('n') @@ -200,4 +211,9 @@ if __name__ == "__main__": print('mpfh') print(mphf) print('get') - print(get_hash_mphf(mphf, "prout")) \ No newline at end of file + print(get_hash_mphf(mphf, "chenille")) + print("hash table") + n = len(mphf) + print(create_hash_table(set_kmer, n)) + print("compare_taille") + print(compare_taille(10000, "/home/m1miso/pacome.riobe.etu/PycharmProjects/pythonProjectsdd2/sortie.png")) \ No newline at end of file -- GitLab