1 Introduction
Il nous a ´et´e demand´e dans ce travail d’impl´ementer diff´erents algorithmes de hachage et de tester leur
efficacit´e afin de comprendre l’impact qu’ont certains param`etres sur celle-ci.
2 M´ethodes
2.1 Choix d’impl´ementation pour les algorithmes de hachage et de gestion de
collision
J’ai commenc´e par impl´ementer les m´ethodes de hachage telles que d´ecrites dans le pseudo-code de l’´enonc´e,
mais suite `a quelques tests et lectures, j’y ai ajout´e quelques optimisations.
2.1.1 Remplacement des valeurs supprim´ees par des valeurs sentinelles dans le double hachage
Lorsqu’une valeur est supprim´ee, elle est remplac´ee par une valeur sentinelle, qui permet de savoir que cette
place a ´et´e occup´ee `a un certain moment. De cette mani`ere, lorsqu’on utilise la m´ethode self.get(key),
celle-ci peut continuer `a chercher lorsqu’elle tombe sur cette valeur sentinelle et s’arrˆeter pour renvoyer une
KeyError d`es qu’elle tombe sur un emplacement vierge. De plus, afin d’optimiser les futures utilisations de
la m´ethode get(key) ou delete(key), lorsque l’on rencontre une valeur sentinelle avant de trouver la cl´e
d´esir´ee, celles-ci ´echangent leurs places.
2.1.2 Garantir un r´esultat impair pour h2(key)
Comme nous l’avons vu au cours th´eorique, pour que la m´ethode de gestion de collisions par double hachage
donne de bons r´esultats, h2(key) et la longueur de la table doivent ˆetre premiers entre eux. Une mani`ere
d’y arriver est de faire en sorte que h2(key) retourne un chiffre impair et que la table soit une puissance
de deux. Pour cela, je me suis tout simplement servie d’un or 0b1, qui garantit donc que le dernier bit du
r´esultat sera un 1 et qu’il sera donc impair. Une autre possibilit´e aurait ´et´e de choisir un m premier et de
faire en sorte que h2(key) renvoie une valeur inf´erieure `a m avec un modulo m, mais je ne m’attarderai pas
sur cette impl´ementation que je n’ai pas choisie, n’´etant pas celle pr´esent´ee au cours.
2.2 Choix d’impl´ementation pour les tests et les graphiques
J’ai tent´e d’´ecrire mes fonctions de timer et de mani`ere `a pouvoir tester mes m´ethodes avec diff´erents jeux
de donn´ees afin de pouvoir d´eceler les limites des algorithmes de hachage impl´ement´es. Je pr´esenterai ici
les r´esultats des tests qui m’ont paru les plus pertinents. De plus, j’ai d´ecid´e de tenir compte des temps
minimums que donne la fonction timeit.timeit afin de n´egliger au maximum les biais dˆus `a la rapidit´e du
processeur. Pour certaines figures, j’ai choisi de prendre des graphiques dont les courbes individuelles des
algorithmes ne sont pas distinguables. Je pars du postulat que l’int´erˆet ici est de voir la tendance g´en´erale
et pas le comportement d’un algorithme en particulier, sauf s’il s’en ´eloigne de mani`ere remarquable.
2