From 713f9351faa1322306c2cf2e9fb858345625e812 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ay=C3=A2t=20Chergui?=
 <ayat@Ordinateur-portable-de-Ayat.local>
Date: Thu, 13 Feb 2025 12:22:28 +0100
Subject: [PATCH] tp1 plus ou moins fini

---
 TP2_hachage/tp_2_miso_mphf.py | 82 ++++++++++++++++++-----------------
 1 file changed, 42 insertions(+), 40 deletions(-)

diff --git a/TP2_hachage/tp_2_miso_mphf.py b/TP2_hachage/tp_2_miso_mphf.py
index ebc3d33..99b2ab5 100644
--- a/TP2_hachage/tp_2_miso_mphf.py
+++ b/TP2_hachage/tp_2_miso_mphf.py
@@ -41,34 +41,32 @@ 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
-				# 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
+				index = abs(hash(kmer)) % (gamma*l)
+				if tableau_principal[index]!= -1:
+					collision.add(kmer)
+				else :
+					tableau_principal[index] = index
 
 			tableaux.append(tableau_principal) # expliquer
 			set_kmer_courant = collision.copy() # expliquer
-			collision = set() # expliquer
+			collision = set() # expliquer je pense que c'est pour éliminer les collisoin de même valeurs
 
 	# Construction de la MPHF
 	mphf = [] 
 	grand_tableau = []
 	for tableau in tableaux:
-		grand_tableau.extend(tableau) # expliquer
+		grand_tableau.extend(tableau) # expliquer elle va ajouté toute les valeurs du tableau 
 
 	rangs = []
 	max_rang = 0
 	i = 0
 	for kmer in set_kmer:
-		pass # compléter:
-		# hacher le kmer
-		# si le hash est dans le grand_tableau
-			# récupérer son index
-			# récupérer son rang (utiliser la fonction count())
-			# ajouter à la mphf [h, rang]
-			# mettre à jour max_rang
+		hacher = abs(hash(kmer))
+		if hacher in grand_tableau :
+			index = grand_tableau.index(hacher)
+			rangs.append(grand_tableau[:index].count(hacher))
+			mphf.append([hacher, rangs[-1]])
+			max_rang = max(rangs)
 
 	for kmer in set_kmer_courant: #gestion des collisions: expliquer les 3 lignes du dessous
 		max_rang += 1
@@ -98,35 +96,39 @@ def get_hash_mphf(mphf, kmer):
 	>>> 0 <= hash_mphf < n
 	True
 	"""
-	pass # TODO modifier
+	hacher = abs(hash(kmer))
+	for h, rang in mphf :
+		if h == hacher :
+			return rang
 
 def create_hash_table(set_kmer, n):
-    """
-    Crée une table de hachage à partir d'un ensemble de k-mers et d'une mphf
-
-    Parameters:
-    set_kmer (set): Ensemble de k-mers.
-    n (int): Taille de la table de hachage.
+	"""
+	Crée une table de hachage à partir d'un ensemble de k-mers et d'une mphf
 
-    Returns:
-    list: Table de hachage créée à partir des k-mers
-    mphf: la mphf
+	Parameters:
+	set_kmer (set): Ensemble de k-mers.
+	n (int): Taille de la table de hachage.
 
-    Examples:
-    >>> set_kmer = {'ATCG', 'TGCA', 'GCTA'}
-    >>> n = 10
-    >>> tableau = create_hash_table(set_kmer, n)
-    >>> len(tableau) == n
-    True
-    >>> all(kmer in tableau for kmer in set_kmer)
-    True
-    """
-    pass # TODO modifier
-    # 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
-    # retourner le tableau et la mphf
+	Returns:
+	list: Table de hachage créée à partir des k-mers
+	mphf: la mphf
 
+	Examples:
+	>>> set_kmer = {'ATCG', 'TGCA', 'GCTA'}
+	>>> n = 10
+	>>> tableau = create_hash_table(set_kmer, n)
+	>>> len(tableau) == n
+	True
+	>>> all(kmer in tableau for kmer in set_kmer)
+	True
+	"""
+	mphf = construction_mphf(set_kmer, n)
+	tableau = n*[None]
+	for i in set_kmer:
+		hacher = get_hash_mphf(mphf, i)
+		if hacher :
+			tableau[hacher] = i
+	return tableau, mphf
 
 
 
@@ -166,4 +168,4 @@ def compare_taille(n_max, fichier_sortie):
 	plt.close()
 
 # dé-commenter quand vous êtes prêts, expliquer les résultats
-#compare_taille(10000,"mphf.png")
+compare_taille(10000,"mphf.png")
-- 
GitLab