1
Table de hachage
1 Présentation
Une table de hachage est une structure de données permettant d’implémenter efficacement des dictionnaires.
La structure est en fait un tableau T de m listes chaînées (figure 1 1).
Lors de l’insertion d’un couple <cle,valeur>, une fonction de hachage est appliquée à la clé, qui retourne une valeur entière h(cle ).
1. figure tirée de "Introduction to algorithms, second edition", Cormen et al., The MIT Press.
2. Travail demandé
Le travail demandé consiste à utiliser une table de hachage pour implémenter un annuaire associant des n° de téléphone à des noms (les clés).
2.1 Données manipulées
Les données manipulées sont des noms et numéros de téléphone représentés comme des chaînes de caractères.
L’insertion a lieu dans la liste en
h(cle )modulo m
(m taille de T=2.2 Quelle Fonction de hachage?
La fonction de hachage des noms est donnée par l’algorithme suivant (de D. Bernstein):
Algorithm 1 Fonction de hachage Require: a string str
Ensure: an unsigned int corresponding to the hash value of the key.
hash ← 5381
c ← first character of str while c = ’\0’ do
hash ← hash * 33 + c c ← next character of str end while
return hash
2
2.3 Annuaire
Définir une structure d’annuaire struct annuaire comme un tableau de listes chaînées contenant des couples <nom, numero>.:
typedef struct LL { char nom[10];
char numero[10];
struct LL *suiv;
}Annu;
Annu *annuaire[20];
Opérations
sur l’annuaire sont :A-
Création
d’un annuaire initialement vide : void creer ( ) ; B-Insertion
d’un couple <nom, numero> :Annu ∗ inserer (struct annuaire ∗an , char ∗nom, char ∗numero ) ;
Si l’annuaire ne contenait aucune entrée de clé nom, alors une nouvelle entrée associant nom à numero est ajoutée et la fonction retourne NULL.
Sinon, la valeur associée à nom est remplacée par le paramètre numero, et l’ancien numéro est retourné (attention, la chaîne retournée est à libérer par l’utilisateur !)
C-
Recherche d’un numéro
:- char ∗ Rech (struct annuaire ∗an , char ∗nom ) ;
Retourne un numéro associé à la clé nom si elle est présente dans l’annuaire, NULL sinon.
D- Suppression d’une entrée :
- void Supprime ( struct annuaire ∗an , char ∗nom ) ;
Supprime l’entrée de clé nom si elle est presente, sans effet sinon.E- Libération de toutes les entrées d’un annuaire puis de l’annuaire lui-même :
void Libere ( struct annuaire ∗an ) ;