• Aucun résultat trouvé

Table de hachage

N/A
N/A
Protected

Academic year: 2022

Partager "Table de hachage"

Copied!
2
0
0

Texte intégral

(1)

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

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 ) ;

Références

Documents relatifs

Toute recherche de données est basée sur la même fonction dont le nombre d'adresses possibles est constant. Toute collision conduit à la création d'un débordement 

Cette clé primaire préliminaire est générée à partir des données échangées depuis le début du hanshake, chiffrée avec la clé publique du serveur (trouvée dans son

– Cette clé primaire préliminaire est générée à partir des données échangées depuis le début du hanshake, chiffrée avec la clé publique du serveur (trouvée dans

Théorème : Si les éléments de table [1 … n] et x sont choisis uniformément dans un intervalle [a,b], le temps moyen.. d’exécution de la recherche par interpolation est O (log

was recently informed that researchers had discovered a way to &#34;break&#34; the current Federal Information Processing Standard SHA-1 algorithm,. which has been in effect

Probl`eme : grappe faible (secondary clustering) — suite de cases occup´ees par cl´es avec la mˆeme valeur de hachage.. N’est pas certain que l’on trouve une case vide lors

suppression avec adressage ouvert : tr`es difficile utiliser lazy deletion : marquer la case «supprim´ee».. ⇒ facteur de remplissage inclut les

En PostgreSQL, on peut choisir le type d’index utilisé dans un CREATE INDEX avec USING method entre le nom de la table et la liste des colonnes, method pouvant être btree (arbre B,