• Aucun résultat trouvé

Tables d’association, tables de hachage

N/A
N/A
Protected

Academic year: 2022

Partager "Tables d’association, tables de hachage"

Copied!
6
0
0

Texte intégral

(1)

Conception de structures de donn´ ees

Cours 8 Tables de hachage

3 juin 2013

Struct 1/24

Tables d’association, tables de hachage

Struct 2/24

Tables Collisions Implantation

Table d’association

Besoin : un structure de donn´ees contenant des informations identifiables (index´ees) `a partir de cl´es (pas des entiers).

Exemples : annuaire, dictionnaire, bases de donn´ees,...

Contrainte :la structure doit ˆetre dynamique; on veut pouvoir ajouter ou supprimer des ´el´ements d’informations (rapidement).

Type abstrait : table d’association qui offre les op´erations suivantes :

Trouver l’information associ´ee `a une cl´e donn´ee.

Ajouter une nouvelle association (paire) entre une cl´e et une information.

S’il existe d´ej`a une information associ´ee `a la cl´e dans la table, alors la nouvelle information remplace l’ancienne.

Sinon, une nouvelle association est ajout´ee `a la table.

B Jamais 2 informations distinctes associ´ees `a la mˆeme cl´e.

Retirer une cl´e de la table (avec l’information associ´ee).

Tables Collisions Implantation

Graphiquement

Univers des clés possibles

clés réelles

Données

k1

k2

k3 k4

k5

d1 d2

d3

d4 d5

(2)

Exemple

Compter les mots dans un texte (Le Corbeau et le Renard) :

Univers des clés possibles

clés réelles

Données

corbeau

le bec

4 un

5

7 renard

2

2

...

...

Struct 5/24

Complexit´ es compar´ ees

Il est possible d’implanter facilement une table d’association en utilisant un tableau, une liste ou un arbre dont les ´el´ements sont des paires {cl´e, donn´ee}.

Complexit´e

Op´eration tableau tab. tri´e DList arbre (AVL) Chercher O(n) O(logn) O(n) O(logn)

Ins´erer O(n) O(n) O(n) O(logn)

Supprimer O(n) O(n) O(n) O(logn) Taille ? limit´ee limit´ee illimit´ee illimit´ee Complexit´es des diff´erentes implantations possibles.

Struct 6/24

Tables Collisions Implantation

Adressage direct

Conditions id´eales de r´ealisation d’une table d’association : Les cl´es sont des entiers positifs ;

Il n’y a qu’un petit nombre de cl´es possibles ; Il n’y apas trop des “trous” entre les cl´es.

En r´esum´e : l’ensemble (univers) U de toutes les cl´es possibles est un petit intervalle entier : {0, . . . , n−1}.

Il suffit alors d’utiliser un tableau de taille n(les cl´es sont les indices des cases et les donn´ees sont stock´ees directement).

Exemple : compter le nombre d’occ. descaract`eres dans un texte : Les cl´es sont des entiers dans l’intervalle {0, . . . ,127};

La donn´ee associ´ee `a une cl´e est le nombre d’apparition de la lettre dont le code ASCII est la cl´e.

Tables Collisions Implantation

Exemple d’adressage direct

Compter les lettres dans un texte (The Raven and the Fox) :

Univers des clés possibles

clés réelles

Données

0

a b c d e 25 7 15 12 60 97 98 99 100 101 0

127 98 97

99 100

101

127

(3)

Table de hachage

Bien sˆur, il est tr`es souvent impossible d’utiliser l’adressage direct. Par exemple, comment faire si l’universU des cl´es possibles est l’ensemble des mots de la langue anglaise ?

L’id´ee est d’essayer de se ramener au cas de l’adressage direct ! D’abord, il faut d´eterminer un entier m pas trop grand (de l’ordre du nombre de donn´ees `a stocker), qui sera la taille de la table de hachage T.

Ensuite, on choisitune fonction de hachage h :U → {0, . . . , m−1}.

Une donn´ee de cl´ek est plac´ee dans la case T[h(k)]

(et non pas T[k]).

Exemple : pour compter les mots d’un texte, on peut choisir comme fonction de hachage la longueur des mots et comme taille de table le nombre de mots du texte.

Struct 9/24

Exemple de table de hachage

Compter les mots dans un texte (The Raven and the Fox) :

Univers des clés possibles

clés réelles

Données

corbeau

le bec

un renard

...

0 1 2 3 4 5 6 7 8 9 10

4 5 ou 7?

2

2

Probl`eme : collisions possibles ! ! !

Importance de la r´epartition des cl´es dans la table.

Struct 10/24

Tables Collisions Implantation

Quelques remarques sur les collisions

Le cas id´eal : aucune collision possible. C¸ a suppose que la table est suffisamment grande : m≥ |U|,

les valeurs de hachage sont bien r´eparties dans l’ensemble {0, . . . , m−1}.

Dans ce cas l`a, en supposant que le temps de calcul de la fonction de hachage est constant, les 3 op´erations (acc`es, ajout, suppression) ont une complexit´e O(1) dans le pire des cas.

La r´ealit´e :

Le plus souvent m <|U|et donc on ne peut ´eviter les collisions (par principe des tiroirs) ;

La complexit´e des op´erations d´epend du nombre de collisions : il faut donc essayer de limiter les collisions.

Il faut bien choisir la taillem.

La fonction h doit “bien r´epartir” les cl´es dans la table.

Tables Collisions Implantation

Importance du choix de la fonction de hachage

6

= fonctions de hachage pourU =/usr/share/dict/words,m= 1000.

(4)

Importance du choix de la taille de la table

Struct 13/24

Importance du choix de la taille de la table - 2

h(c0c1. . . cn) = (c0+ 128×c1+ 1282×c2+· · ·+ 128n×cn) %lg lg est la taille de la table de hachage ;

`

a gauche lg = 997 ;

`

a droitelg = 1024 ;

Struct 14/24

Tables Collisions Implantation

Gestion des collisions

Tables Collisions Implantation

R´ esolution des collisions par chaˆınage

On peut g´erer les collisions parchaˆınage : toutes les donn´ees dont les cl´es ont lamˆeme valeur de hachagesontstock´ees dans une liste.

Les cases de la table t sont initialis´ees avec des listes vides ; Trouver (ou supprimer) la cl´ek : on parcourt la liste t[h(k)] ; Ajouter la cl´e k : on l’ins`ere au d´ebut de la liste t[h(k)] ; Si n´ecessaire, d’abord supprimer l’ancienne paire dont la cl´e est k.

Rmq : les ´el´ements de la tablet sont donc des listes d’association.

BDans le pire des cas, les n cl´es sont hach´ees dans la mˆeme case ; on se ram`ene `a une unique liste d’association :

Ajout, acc`es, suppression : O(n)

En r´ealit´e, avec une bonne fonction de hachage, les listes restent de petite taille et les 3 op´erations restent tr`es performantes.

(5)

R´ esolution des collisions par chaˆınage

Univers des clés possibles

clés réelles

k1 k2

k4 k5

Données

k1 5 k2 46

0 1 2 3 4 5 6 7

k3 8 k6 5

k5 12

k4 74 k7 11 k3

k7 k6

k8

k8 5

Struct 17/24

R´ esolution des collisions par adressage ouvert

On peut g´erer les collisions paradressage ouvert : si une case est d´ej`a remplie, la cl´e `a ins´erer est stock´ee dans une autre case de la table. On n’utilise pas d’espace m´emoire annexe.

Ajouter la cl´e k (si elle est d´ej`a pr´esente, la supprimer) : d’abord tester la case d’indiceh(k),

puis, si cette case est d´ej`a occup´ee, chercher la prochaine case vide en suivant une s´equence d’indices pr´ed´efinie.

Trouver la cl´e k :

on cherche dans t[h(k)],

puis, si cette case estd´ej`a occup´ee par une cl´e diff´erente, on suit la mˆeme s´equence que pour l’ajout d’une cl´e jusqu’`a trouverk ou une case vide(si la cl´ek n’est pas dans la table).

Supprimer la cl´ek : comme pour la recherche. Par contre, il fautlaisser un marqueurdans une case d’o`u l’on retire une cl´e.

BDans le pire cas, toutes les op´erations sont enO(n), mais avec de bonnes fonctions et une table assez grande, les 3 op´erations sont efficaces.

Struct 18/24

Tables Collisions Implantation

Sondage lin´ eaire

Sondage lin´eaire : les sauts sont proportionnels au nombre d’essais.

h(k, i) =h(k) +i mod m

15 82 19 21 33 13 11

28 58

0 1 2 3 4 5 6 7 8 ... m-2 m-1

15 82 19 27 21 33 13 11

28 58

0 1 2 3 4 5 6 7 8 ... m-2 m-1

h(27)=2 27

15 82 19 21 33 13 11

28 12 58

0 1 2 3 4 5 6 7 8 ... m-2 m-1

12

h(12)=m-3 27

Probl`eme : ph´enom`ene de grappes

Tables Collisions Implantation

Sondage quadratique, hachage double

Sondage quadratique : les sauts sont proportionnels aucarr´e du nombre d’essais.

h(k, i) =h(k) +c1×i+c2×i2 mod m

Probl`eme : sondages identiques pour des cl´es qui ont la mˆeme valeur de hachage.

Hachage double : les sauts sont calcul´es avec une 2e fonction de hachage. En choisissant bien les fonctions, on obtient des sauts qui semblent al´eatoires (c’est la meilleure m´ethode).

h(k, i) =h(k) +i×h2(k) mod m

(6)

Implantation en C

Struct 21/24

Type HashTable

typedef char *Key;

typedef int Value;

typedef struct{

Key k;

Value v;

}Element; // une paire: (cl´e, donn´ee)

typedef struct{

Element *tab; /* ou alors: Mlist *tab; */

int lg;

int (*f)(Key, int); /* fonction de hachage */

}HashTable;

Struct 22/24

Tables Collisions Implantation

Fonctions associ´ ees

int hashFunction(Key s, int mod) ...

HashTable makeHashTable(int lg, int (*f)(Key, int));

Element accessH(Key s, HashTable t); // recherche Element deleteH(Key s, HashTable *t); // suppression void addH(Key s, Value v, HashTable *t); // ajout

List listElements(HashTable t);

void hashList(List l, HashTable *t);

Tables Collisions Implantation

Glossaire

Donn´ee : information `a stocker.

Cl´e : identifiant d’une donn´ee.

Univers des cl´es : ensembles de toutes les cl´es possibles.

Paire: couple (cl´e, donn´ee).

Structure de donn´ees dynamique : structure de donn´ees permet- tant de stocker des informations qui ´evoluent dans le temps.

Table d’association : table qui permet de stocker des donn´ees auxquelles ont acc`ede par leur cl´es.

Fonction de hachage : fonction qui associe un indice entier positif `a une cl´e.

Valeur de hachage (d’une cl´e) : valeur de la fonction de hachage.

Table de hachage : table d’association qui utilise une fonction de hachage pour d´eterminer l’indice de la case o`u stocker une cl´e.

Collision : quand 2 cl´es ont les mˆemes valeurs de hachage.

Références

Documents relatifs

Ces eaux, alors sous forme liquide, peuvent soit s’infiltrer dans le sol jusqu’aux nappes phréatiques souterraines, soit ruisseler le long du relief pour former les

Acla maJh~mat~ca.. I t will be apparent by inspection of the above formulm, and it becomes still more evident i n working systematically with the twelve func-

In Section 2 we fix our notation and give some examples, mainly in the complex case. Section 3 contains some isomorphic results. with one remarkable exception: an

,lefquelles peines auront lieu, tant contre ceux qui auront offert ou donné, que contre ceux qui auront marchandé, reçu ou acheté lefdites efpeces, ou matieres à plus haut prix

1 Chirurgiens qui affinneront leurs rapports vëntobles i ce qui aura lzelf à 1'égard.des perfônnes qui agiront pour ceux qui , fêTont de'ce'dés &#34; &amp;- le rapport joint au

Mars accueille ainsi la plus haute montagne connue du syst`eme solaire, le Mont Olympe, qui culmine ` a plus de 27 km au-dessus de sa base, soit plus de trois fois l’altitude

Quelle est la probabilité d'obtenir au moins trois fois (( face

L’exemple pr´ ec´ edent est en fait un cas plus simple que le cas g´ en´ eral qu’on a pr´ esent´ e, car on interdit en Caml aux variables d’apparaˆıtre plusieurs fois dans