@@ -29,6 +29,9 @@ La courbe est beaucoup moins fluide. Elle monte par paliers, car le dictionnaire
La MPHF est clairement plus avantageuse en termes de mémoire, surtout quand on travaille avec de très grands ensembles de k-mers, comme c’est souvent le cas en bioinformatique. Le dictionnaire, lui, reste pratique et facile à utiliser, mais il devient vite inefficace quand on monte en volume.
Bonus : faites varier `nb_niveaux` et `gamma`, voyez quelle influence ils peuvent avoir.
On constate qu'augmenter gamma ou nb_niveaux ne change pas la taille finale de la structure (elle reste fixe car on stocke une paire par k-mer),
mais cela ralentit la construction de la MPHF.
Autrement dit, ces paramètres font travailler le code un peu plus pour mieux gérer les collisions, ce qui allonge le temps de calcul sans affecter la taille finale.
# Partie 2 - Analyse de performance de dictionnaires en Python
...
...
@@ -75,3 +78,17 @@ Initialiser dans la fonction `experiment_load_factor` des listes `insertion_time
- Un histogramme des fréquences des temps d'insertions discrétisés (code fourni, remplacer la liste vide par la bonne entrée)
10. Commentez vos résultats.
-Pour le graphique du temps d'insertion en fonction du facteur de charge ,on constate que l’insertion dans un dictionnaire Python demeure rapide même lorsque le facteur de charge est proche de 1.0.
Les sauts traduisent les réallocations internes et la gestion mémoire dynamique de Python, qui peuvent se produire à des moments différents d’une exécution à l’autre
-Pour le graphique du nombre de réallocations de mémoire en fonction du facteur de charge , on constate que plus on insère d’éléments (donc plus le facteur de charge est élevé),
plus le dictionnaire Python se réalloue en mémoire, jusqu’à atteindre un plateau autour de 12 réallocations.
Python effectue ces réallocations par paliers, ce qui explique pourquoi le nombre total de «resizes» reste finalement assez limité malgré un grand nombre d’insertions.
-Pour le graphique de la taille de mémoire occupée en fonction du nombre d'éléments ,On voit que la mémoire occupée par le dictionnaire augmente à mesure que le nombre d’éléments insérés croît,
avec des sauts plus ou moins marqués qui correspondent aux réallocations internes. Au-delà d’un certain seuil (environ 6000 éléments ici), la taille mémoire se stabilise, car le dictionnaire a suffisamment grandi pour accueillir la totalité des clés.
-On constate sur l'histogramme des fréquences des temps d'insertions discrétisés que La majorité des insertions se font en un temps quasi nul , tandis qu’une poignée d’insertions plus longues apparaissent dans la seconde barre,
probablement lors des réallocations.
Cela souligne qu’en Python, la plupart des insertions sont très rapides, mais certaines opérations de réallocation peuvent entraîner un temps d’insertion plus élevé.