diff --git a/Algorithmique/Cours/14-hashmap.pdf b/Algorithmique/Cours/14-hashmap.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1805f7e37f24b37761484bc6f7028dc5eb50e0ef Binary files /dev/null and b/Algorithmique/Cours/14-hashmap.pdf differ diff --git a/Programmation/Exercices/serie_13_hashmap/serie_13_hashmap.md b/Programmation/Exercices/serie_13_hashmap/serie_13_hashmap.md new file mode 100644 index 0000000000000000000000000000000000000000..d453cd707f1553456181e63dcf85e268691a2347 --- /dev/null +++ b/Programmation/Exercices/serie_13_hashmap/serie_13_hashmap.md @@ -0,0 +1,72 @@ +--- +title: "Programmation séquentielle" +subtitle: "Série 13 - Table de hachage" +date: 28.02.2023 +autoSectionLabels: false +autoEqnLabels: true +eqnPrefix: + - "éq." + - "éqs." +chapters: true +numberSections: false +chaptersDepth: 1 +sectionsDepth: 3 +lang: fr +documentclass: article +papersize: A4 +cref: false +urlcolor: blue +toc: false +--- + + +# Buts + +Dans ce travail vous verrez les concepts suivants: + +* Créer et utiliser une librairie de table de hachage. +* Création de fonction de hachage simple. +* Evaluation des performances d'une implémentations. + +Vous avez vu la théorie sur les tables de hachages au cours d'algorithmique. + + +# Énoncé + +Dans ce travail pratique il s'agit d'implémenter une table de hachage en +utilisant la méthode du double hachage pour traiter les collisions. + +Vous implémenterez une librairie de table de hachage permettant de stocker des paires clé-valeur de type chaine de caractères (les clés et les valeurs sont des chaines de caractères). + +Concernant les structures de données et les fonctions de l'API de votre librairie, référez-vous au cours théorique. + +Vous écrirez un programme qui permet de créer une table de hachage, et permet à l'utilisateur d'ajouter / supprimer / consulter des éléments de la table de hachage ainsi que d'afficher la table de hachage. + + +## Gestion des collisions + +Un des objectifs de ce travail est d'observer l'impact des fonctions de hachage utilisées sur le comportement de la table. Dans le cours, on a vu que l'utilisation d'une mauvaise fonction de hachage pouvait conduire à l'apparition de regroupements (ou "clusters" dans la table). Une bonne fonction de hachage produira beaucoup de petits regroupements, alors qu'une mauvaise fonction produira peu de grands regroupements. + +Vous devrez faire des essais avec au moins deux fonctions de hachages différentes et deux fonctions de double hachage différentes. Voici un exemple de fonction de hachage avec lequel vous pouvez commencer à travailler : + +```C +val = 0; +for (int i = 0; i < strlen(c); ++i) { + val = (43 * val + c[i]) % length; +} +return (val % length); +``` + +Et comme fonction de double hachage, vous pouvez commencer par utiliser un décalage constant. + +Pour pouvoir faire des expérimentations, ajoutez les deux fonctions suivantes à votre librairie : + +```C +// retourne le nombre de regroupements trouvés dans la hm +int hm_count_clusters(hm h); + +// retourne la taille moyenne des regroupements +double hm_mean_cluster_size(hm h); +``` + +Puis écrivez un programme qui rempli votre table de hachage avec un certain nombre de paire clé / valeur. Observez comment le changement de la / des fonctions de hachage influe sur le nombre de regroupements et leurs tailles. diff --git a/Programmation/Exercices/serie_13_hashmap/serie_13_hashmap.pdf b/Programmation/Exercices/serie_13_hashmap/serie_13_hashmap.pdf new file mode 100644 index 0000000000000000000000000000000000000000..0f0e6409258c4b14fd68082dae9725eeca9dff7e Binary files /dev/null and b/Programmation/Exercices/serie_13_hashmap/serie_13_hashmap.pdf differ