1
UMLV
1. Introduction
2. Hachage ouvert
3. Hachage fermé
4. Implémentation des fonctions
Méthodes de hachage
2
UMLV Recherche dichotomique
3 4 8 9 10 20 40 50 70 75 80 83 85 90 1 2 3 4 5 6 7 8 9 10 11 12 13 14
d i f 4 ?d i f d i fdi f df
table
fonction ELEMENT (x, table, d, f ) ;début si (d = f) alors si (x = table [d ]) alors retour (vrai) sinon retour (faux) sinon { i (d+f ) / 2 ; si (x > table [i]) alors retour (ELEMENT (x, table, i+1, f )) sinon retour (ELEMENT (x, table, d, i)) }fin
Temps (ELEMENT sur table [1 … n]) = O (log n)
3
3 4 8 9 10 20 40 50 70 75 80 83 85 90
UMLV Recherche par interpolation
table1 2 3 4 5 6 7 8 9 10 11 12 13 14di f
di f 4 ? df
fonction ELEMENT (x, table, d, f ) ;début si ( d = f ) alors si (x = table [d ] alors retour (vrai) sinon retour (faux) sinon {
i d +
si (x > table [i] alors retour (ELEMENT (x, table, i+1, f )) sinon retour (ELEMENT (x, table, d, i)) }fin
);( df
dtableftable
dtablex
4
Idée : Établir une relation entre un élément et l’adresse à laquelle il est rangé en mémoire
Théorème : Si les éléments de table [1 … n] et x sont choisisuniformément dans un intervalle [a,b], le temps moyend’exécution de la recherche par interpolation est O (log log n)
UMLV
5
Type abstrait « dictionnaire »Ensembles avec les opérations principales
ELEMENT (x, A)AJOUTER (x, A) temps constant en moyenneENLEVER (x, A)
Implémentation non adapté au classement.
Table de hachagetable dont les indices sont dans [0 .. B-1]
Fonction de hachageh : éléments [0 .. B-1] non injective en général
Résolution des collisionsHachage ouvert : avec listes, triées ou non.Hachage fermé : linéaire, quadratique, aléatoire,
uniforme, double, ...
UMLV Hachage
6
UMLV Hachage ouvert
table01
B-1
Liens explicitesTaille variable
fonction h (x : mot) : indice ;début
somme : = 0 ;pour i 1 à longueurmaxi faire somme somme + ord (x [i]) ;retour (somme mod B) ;
fin
7
UMLV
int hash (char * s) {char * p ;unsigned h = 0, g ;for (p = s ; * p ; p++) {
h = (h<< 4) + (* p) ; if (g = h & 0xf0000000) { h = h ^ (g >> 24) ;
h = h ^ g ; }}return (h % PRIME) ;
}
Voir Aho, Sethi, Ullman, Compilers, Addison-Wesley, 1986
8
UMLV const B = {constante ad hoc} ;type liste = cellule ;
cellule = record elt : élément ;
suivant : liste end ;
dictionnaire = array [0 .. B-1] of liste ;
fonction VIDER () : dictionnaire ;début
pour i 0 à B-1 faire A [ i ] NULL ;retour A ;
fin
fonction ELEMENT (x élément, A dictionnaire) : booléen ;début p A [ h(x) ] ;
tantque p NULL fairesi p->elt = x alors retour vraisinon p p->suivant ;
retour faux ;fin
9
UMLV fonction AJOUTER ( x élément, A dictionnaire) ;début
AJOUTERLISTE ( x, h(x) ) ;retour A ;
fin
x
h(x)
fonction AJOUTER (x élément, A dictionnaire) ;début
si non ELEMENT (x, A) alors {i h (x) ;p A [ i ] ;
allouer A [ i ] ;A [ i ]->elt x ;
A [ i ]->suivant p ;}retour A ;
fin
10
Hachage ouvert
- initialisation (VIDER) : O (B)
- ajout : temps constant (après test d ’appartenance)
- appartenance
- suppression
si les événements "h (x) = i" sont équiprobables
Création d'une table de n éléments :
))+(1 ( O Bnn
) + (1 O Bn
UMLV Temps des opérations
11
UMLV Hachage fermé
table
01
B-1
• liens implicites : gain de place• taille limitée• ré-allocation en cas de débordement
Re-hachage
h0 (x) = h (x), h1 (x), … hi (x), …
où hi (x) dépend généralement de x et de i
Suppression d ’un élément
distinction entre « vide » et « disponible »
facteur de charge : n / B où n = nombre d ’éléments
12
UMLV Hachage linéaire
Re-hachage : hi (x) = (h(x) + i) mod B
FORWARD
disponible
THEN
vide
vide
FOR
TO
0
1
2
3
4
5
B-1= 6
EXEMPLE
h (x) = (ord (c) - ord (‘a’)) mod Boù c première lettre de x.
AJOUTER (‘BEGIN’)AJOUTER (‘FOR’)AJOUTER (‘FUNCTION’)AJOUTER (‘FORWARD’)AJOUTER (‘THEN’)ENLEVER (‘FUNCTION’)ENLEVER (‘BEGIN’)AJOUTER (‘TO’)
13
UMLV ãconst B = {constante ad hoc} ; vide = {constantes particulières } ;
disponible = {distinctes des éléments } ; {mais de même type } ;
type dictionnaire = array [0… B-1] of éléments ;
fonction VIDER () : dictionnaire ;début
pour i 0 à B-1 faireA [ i] vide ;
retour A ;fin
fonction POSITION (x élément, A dictionnaire) : indice ;/* calcule la seule position possible où ajouter x dans A */début i 0 ; tantque (i < B) et A [hi (x)] x et A [hi (x)] vide et A [hi (x)] disponible
faire i i + 1 ; retour (hi (x)) ;fin
14
UMLV
fonction POSITIONE (x élément, A dictionnaire) : indice ;début hi h (x) ; dernier (hi + B-1) mod B ;
tantque hi dernier et (A [hi] {x, vide}) fairehi (hi + 1) mod B ;
retour (hi)fin
fonction ELEMENT (x élément, A dictionnaire) : boolean ;début
si A [POSITIONE (x, A)] = x retour vrai ;sinon retour faux ;
fin
fonction ENLEVER (x élément, A dictionnaire) : dictionnaire ;début
i POSITIONE (x, A) ;si A [ i ] = x alors A [ i ] disponible ;retour A ;
fin
15
UMLV
fonction POSITIONA (x élément, A dictionnaire) : indice ;début hi h (x) ; dernier := (hi + B-1) mod B ;
tantque hi dernier et (A [hi] {x, vide, disponible}) fairehi (hi + 1) mod B ;
retour hi ;fin
fonction AJOUTER (x élément, A dictionnaire) : dictionnaire ;début
i POSITIONA (x, A) ;si A [ i ] {vide, disponible} alors
A [ i ] x ; retour A ;
sinon si A [ i ] x alorserreur ( " table pleine " ) ;
fin
16
UMLV Hachage quadratique
Re-hachage : hi (x) = (h (x) + i ²) mod B
fonction POSITION (x élément, A dictionnaire) : indice ;début
hi h (x) ; inc 1 ;tantque (inc < B) et (A [hi] {x, vide, ? }) faire
hi (hi + inc) mod B ;inc inc + 2 ;
retour hi ;fin
• seule la moitié de la table est examinée par re-hachage utiliser la suite :
h (x), h (x) + 1, h (x) - 1, h (x) + 4, h (x) - 4, …avec B premier.
17
UMLV Hachage double
Re-hachage : hi (x) = (h(x) + i g (x)) mod B- B premier et 1 g (x) B - 1- ou B premier avec chacun des g (x)pour examen de toute la table par re-hachage.
fonction POSITION (x élément, A dictionnaire) : indice ;début
hi h (x) ;inc g (x) ;dernier (hi + (B-1)* inc) mod B ;tantque (hi dernier) et (A [hi] {x, vide, ? }) faire
hi (hi + inc) mod B ;retour hi ;
fin
18
UMLV Hachage aléatoire
Re-hachage : hi (x) = (h (x) + di) mod B,d1, d2, …, dB-1 permutation aléatoire de (1,..., B-1)
Génération des di par « décalage ».
- choix de k (1,…, B-1)
2 . di si 2 . di B-1 (2 . di - B) k sinon
Exemple B = 8 k = 3 = 112
d1 = 510 = 1012
d2 = 110 = 0012
d3 = 210 = 0102
d4 = 410 = 1002
d5 = 310 = 0112
d6 = 610 = 1102
d7 = 710 = 1112
- di + 1 = {
19
Hachage fermé (aléatoire)
table contenant n éléments- initialisation (VIDER) : O (B)- probabilité d'avoir i comparaisons :
- coût d'un ajout réussi
i
B
n
B-i+n-i+ . ...
B-n- .
bn
11
11
Bn-
= B
n +
i
i= 1
11
1
B - Bn-
. ~ -
n
= C eB
n
n-
k=n
Bk 11
1log
1
11 11
0
n/B 50 % 80 % 90 %Cn 1,39 2,01 2,56
UMLV Temps des opérations
- création d'une table à n éléments (n B) Cn = coût moyen d'un ajout
20
F tableau associatif : nombre fini d'indices de type quelconque F fonction de domaine fini F représentable par l'ensemble E = { (x, F [x]) / x domaine de F }
Opérations
- INIT (F) rendre F [x] non défini pour tout x - DEFINIR (F, x, y) poser F [x] = y - CALCULER (F, x) = y si F [x] = y nul sinon
Implémentation
- représenter E par hachage sur le domaine de F
UMLV Tableau associatif
21
Traducteur mot-à-mot
dico
if sithen alorselse sinon
entrée
text ---
if --- then
sortie
texte ---
Trad si --- alors
UMLV TRADUCTEUR
Top Related