From 4fdf406003ff54e77dfe9cdac646a9617242dba5 Mon Sep 17 00:00:00 2001
From: DIALLO <mamadou.diallo4.etu@univ-lille.fr>
Date: Thu, 27 Feb 2025 10:06:39 +0100
Subject: [PATCH] modification de la fonction create_hash_table

---
 .idea/misc.xml                             |   5 ++++-
 .idea/tp2-hachage.iml                      |   7 ++++--
 __pycache__/tp_2_miso_mphf.cpython-313.pyc | Bin 0 -> 6464 bytes
 tp_2_miso_mphf.py                          |  24 ++++++++++++++++++---
 4 files changed, 30 insertions(+), 6 deletions(-)
 create mode 100644 __pycache__/tp_2_miso_mphf.cpython-313.pyc

diff --git a/.idea/misc.xml b/.idea/misc.xml
index 686ec17..322d2e7 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,4 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
-  <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.12 (notebook4)" project-jdk-type="Python SDK" />
+  <component name="Black">
+    <option name="sdkName" value="Python 3.13 (tp2-hachage)" />
+  </component>
+  <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.13 (tp2-hachage)" project-jdk-type="Python SDK" />
 </project>
\ No newline at end of file
diff --git a/.idea/tp2-hachage.iml b/.idea/tp2-hachage.iml
index 8b8c395..5656cb1 100644
--- a/.idea/tp2-hachage.iml
+++ b/.idea/tp2-hachage.iml
@@ -1,8 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <module type="PYTHON_MODULE" version="4">
   <component name="NewModuleRootManager">
-    <content url="file://$MODULE_DIR$" />
-    <orderEntry type="inheritedJdk" />
+    <content url="file://$MODULE_DIR$">
+      <excludeFolder url="file://$MODULE_DIR$/.venv" />
+      <excludeFolder url="file://$MODULE_DIR$/.venv1" />
+    </content>
+    <orderEntry type="jdk" jdkName="Python 3.13 (tp2-hachage)" jdkType="Python SDK" />
     <orderEntry type="sourceFolder" forTests="false" />
   </component>
   <component name="PyDocumentationSettings">
diff --git a/__pycache__/tp_2_miso_mphf.cpython-313.pyc b/__pycache__/tp_2_miso_mphf.cpython-313.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..9438a2394075cb8aa612bdc7164587a53032ae42
GIT binary patch
literal 6464
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

literal 0
HcmV?d00001

diff --git a/tp_2_miso_mphf.py b/tp_2_miso_mphf.py
index 1d8802c..aeb4f93 100644
--- a/tp_2_miso_mphf.py
+++ b/tp_2_miso_mphf.py
@@ -141,11 +141,29 @@ def create_hash_table(set_kmer, n):
     >>> all(kmer in tableau for kmer in set_kmer)
     True
     """
-    pass # TODO modifier
+
     # créer la mphf pour les kmers
+    def MPH(kmer):  # On peut pas hacher un set directement
+        return hash(kmer) % n  # une fonction MPH qui calcule un index pour chaque kmer
+
+
     # 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
+    tableau = [None] * n
+    for kmer in set_kmer:
+        index = MPH(kmer)
+        initial_index = index #Sauvegarde de l'index initial pour eviter une boucle infinie
+
+        #Recherche d'une case libre avec linear probing (résolution des collisions)
+        while tableau[index] is not None:  # écrire les kmers aux adresses du tableau données par la mphf
+            index = (index + 1) % n  # on boucle à zero si on atteint la fin
+            if index == initial_index:
+                raise RuntimeError("La table de achage est pleine. Essayez avec une taille plus grande.")
+        tableau[index] = kmer #Insérer le k-mer
+        
+    return tableau, MPH # retourner le tableau et la mphf
+
+
+
 
 
 
-- 
GitLab