From 5d5ae6b405dd6433db16cb66b57a5224c9f25223 Mon Sep 17 00:00:00 2001
From: Rodriguez Tristan <tristan.tolentino.etu@a16p16.fil.univ-lille.fr>
Date: Wed, 26 Feb 2025 14:27:58 +0100
Subject: [PATCH] construction mphf

---
 tp_2_miso_mphf.py | 25 ++++++++++++++++++++-----
 1 file changed, 20 insertions(+), 5 deletions(-)

diff --git a/tp_2_miso_mphf.py b/tp_2_miso_mphf.py
index dfefdab..dfef990 100644
--- a/tp_2_miso_mphf.py
+++ b/tp_2_miso_mphf.py
@@ -41,16 +41,22 @@ def construction_mphf(set_kmer, n, gamma=2, nb_niveaux=3):
 			l = len(set_kmer_courant)
 			tableau_principal = [-1] * (gamma * l)
 			for kmer in set_kmer_courant:
-				pass # compléter
+				x = abs(hash(kmer)) % len (tableau_principal) # On calcule le hachage du k-mer avec hash(kmer), puis on prend la valeur absolue de ce hachage pour garantir que l'index est toujours positif et qu'il reste bien dans les limites de la taille de la table de hachage.
+				if tableau_principal[x] is None: # Si l'index est libre
+					tableau_principal[x] = kmer  # On place le k-mer dans la table
+				else:
+					collision.add(kmer) # mettre le kmer dans collision()
+        
+        			# compléter
 				# hacher le k-mer (attention, hash() peut rendre des entiers signés, nous voulons des entiers positifs)
 				# récupérer l'adresse
 				# si le tableau principal est déjà rempli à l'adresse:
 					# mettre le kmer dans collision()
 					#sinon, écrire le hash à l'adresse dans le tableau principal
 
-			tableaux.append(tableau_principal) # expliquer
-			set_kmer_courant = collision.copy() # expliquer
-			collision = set() # expliquer
+			tableaux.append(tableau_principal) # ajoute le tableau principal à la liste tableaux
+			set_kmer_courant = collision.copy() # On copie l'ensemble des k-mers en collision puis deviendront le nouvel ensemble à traiter dans le niveau suivant
+			collision = set() # Réinitialiser les collisions pour le prochain niveau
 
 	# Construction de la MPHF
 	mphf = [] 
@@ -62,7 +68,16 @@ def construction_mphf(set_kmer, n, gamma=2, nb_niveaux=3):
 	max_rang = 0
 	i = 0
 	for kmer in set_kmer:
-		pass # compléter:
+		x = abs(hash(kmer)) % len (tableau_principal)
+
+        if grand_tableau[h] == kmer:
+           rang = rangs.count(kmer)  # Récupérer le rang du k-mer (utilisation de count() ici)
+           rangs.append(rang)  # Ajouter le rang à la liste des rangs
+           mphf.append([h, rang])  # Ajouter l'index et le rang à la MPHF
+           max_rang = max(max_rang, rang)  # Mettre à jour le rang maximum
+  
+  
+  		# compléter:
 		# hacher le kmer
 		# si le hash est dans le grand_tableau
 			# récupérer son index
-- 
GitLab