Académique Documents
Professionnel Documents
Culture Documents
CSI2510 Hash
CSI2510 Hash
Tables de hachage:
Idée et exemples
Fonctions de hachage:
Génération d’adresses : code de hachage + fonction
de compression
Résolution des collisions:
Chaînage
Sondage linéaire
Sondage quadratique
CSI2510
Hachage double
Idée
Les tables de hachage sont des exemples du TAD MAP
CSI2510
CSI2510 1
Révision - Le TAD Map: méthodes
findElement(k): si il y a un item avec clé k, retourner son
élément, autrement retourner l'élément spécial NO_SUCH_KEY
size(), isEmpty()
keys(), Elements()
findAllElements(k), removeAllElements(k)
CSI2510
Exemple
Les rapports des étudiants sont
emmagasinés dans un tableau utilisant les 0 ∅
7 chiffres d’identification (ID) des 1 6120001
étudiants comme indices. 2 1010002
3 ∅
CSI2510 2
Problème
CSI2510
Principe du hachage
CSI2510 3
L’ idée:
Pour toute clé ki :
T
Chercher la clé ki 0
1
2
3
O( 1 ) ! 4
5
6
Insertion M
M
CSI2510
Hypothèse: 0
toutes les clés ont des premières 1
CSI2510 4
Exemple d’une table de hachage
Si nous voulons insérer deux clés qui ont la même
première lettre 0
1
CAT 2
3
COLLISION
ELEPHANT 4
FOX 5
6
7
8
M M
M M
SKUNK
M
M
CSI2510
ZEBRA
SKUNK
M
M
CSI2510
ZEBRA
CSI2510 5
Fonction de hachage
Une bonne fonction de hachage doit être facile et rapide
à calculer et doit minimiser le risque de collision
La fonction de hachage est la composition de deux
fonctions:
Le code de hachage h1 (Hash code map):
h1: clé → entier
La fonction de compression h2 (Compression map):
h2: entier → [0, Taille du tableau - 1]
On applique le code de hachage puis la fonction de
compression: h(ki)=h2(h1(ki))
CSI2510
Code de hachage
CSI2510 6
Définition:
a = n # de éléments
N # de cellules
CSI2510
CSI2510
CSI2510 7
Code de hachage - Exemples
• Accumulation polynômiale :
– Nous divisons les bits de la clé en une séquence de composantes
de longueurs fixes (par ex., 8, 16 ou 32 bits)
a0 a1 … an-1
CSI2510
La fonction de compression
Le nombre des codes de hachage possibles peut
dépasser la taille du tableau
CSI2510 8
La fonction de compression - Exemples
• Division:
– h2 (y) = y mod N
– Le taille N du tableau de hachage est
d'habitude choisie comme un nombre premier
CSI2510
CSI2510
CSI2510 9
Fonction de hachage
exemples …
CSI2510
r = log N
Simple à calculer
CSI2510
Ne garantit pas une distribution au hasard
CSI2510 10
Fonction de hachage – Exemple Le
a codage de lettres
A 000001
N = 29
}
B 000010
C 000011
29 r= 9 M
H 001000
M
CHAT-- T 010010
M
- 100000
Mot de 6 caracters (seulement pour cet exemple)
h(0000011001000000001010010100000100000) =
C H A T - -
CSI2510
Exemple a.1:
les r bits les plus significatifs
(r = 9)
h(000011001000000001010010100000100000) =
000011001
CSI2510
CSI2510 11
Exemple a.2:
les r bits les moins significatifs
(r = 9)
h(000011001000000001010010100000100000) =
000100000
CSI2510
Simple à calculer
CSI2510
CSI2510 12
Coding of letters
—Exemple — A 000001
}
B 000010
N = 29 C 000011
M
r= 9
29 H 001000
M
T 010010
CHAT-- M
⏐ 100000
h(000011001000000001010010100000100000) =
b)
000011001 plus significatifs
000101001 centraux
000100000 moins significatifs
XOR 000010000 CSI2510
CSI2510
CSI2510 13
Fonction de hachage – Exemple d
CSI2510
Résolution de collision
CSI2510
CSI2510 14
Résolution des collisions
Deux approches:
Chaînage
Adressage ouvert (sondage lineaire, quadratique et
double hachage)
CSI2510
Résolution de collision
Chaînage
1
2 Ex: cricket, cccc
3 CAT CRICKET COYOTE
4 DOG
5 ELEPHANT Idéalement avec une excellente fonction de
6 FOX hachage chaque liste chaînée est de taille n/N
7
8
9 •findElement(k)
10
M •removeElement(k) O(n/N)
M
M •insertItem(k,o)
CSI2510
ZEBRA
CSI2510 15
Résolution des collisions – Adressage ouvert
CSI2510
ZEBRA
CSI2510
Les clés sont stockées dans des cellules contigües
CSI2510 16
Résolution de collision (1)
Sondage linéaire
h ( Ki ), h ( Ki ) + 1, h ( Ki ) + 2, h ( Ki ) + 3 ….
h0 ( Ki ) h1 ( Ki ) h 2 ( Ki ) h3 ( K i )
Soit h0 ( ki ) = h ( ki )
CSI2510
CSI2510 17
Les mises à jour avec un sondage linéaire
• Pour contrôler les • insert Item(k, o)
insertions et les – Nous lançons une exception
suppressions, nous si la table est pleine
introduisons un objet
– Nous commençons à la cellule
spécial, appelé
h(k)
DISPONIBLE, qui remplace
les éléments enlevés – Nous sondons les cellules
consécutives jusqu'à ce que:
• removeElement(k)
• Une cellule i qui est vide ou
– Nous cherchons un item
emmagasine DISPONIBLE
avec la clé k
est trouvée, ou
– Si un tel élément (k, o)
• N cellules ont été
est trouvé, nous le
infructueusement sondées
remplaçons avec l’objet
spécial DISPONIBLE et – Nous emmagasinons l’item
nous retournons (k, o ) dans la cellule i
l'élément o
– Sinon, nous retournons
NO_SUCH_KEY CSI2510
C(α)
α=n/N C(α )
0.1 (10%) 1.06
0.5 (50%) 1.50
0.75 (75%) 2.50
0.9 (90%) CSI2510 5.50
CSI2510 18
Problème avec Sondage Linéaire :
REGROUPEMENT PRIMAIRE
(création de cellules contigües)
h (CAT) =3
3 CAT h1 (CAT) =4
4 CRICKET h2 =5
5 ELEPHANT h3 =6
6 FOX
h4 =7
7 CCC
8 h5 =8 !
CSI2510 19
Performance du Sondage Quadratique
Les résultats expérimentaux pour un tableau de
hachage avec le facteur de chargement α
recherche
α = n/N C(α )
0.1 (10%) 1.05
0.5 (50%) 1.44
0.75 (75%) 1.99
0.9 (90%) 2.79
CSI2510
Idée:
Hachage Double
CSI2510
CSI2510 20
Résolution de collision
Adressage ouvert: (3) Hachage Double
Ex:
h(k ), h(k
2)+h'(k
3 ), h(k1
)+2h'(k
23 ), h(k )+3h'(k ), …
{ i1 i
h
i 1
i23
h
i i i
h0 1 h2 3
Choix de h(•)
Choix de la fonction de hachage secondaire h’( )
CSI2510
0 1 2 3 4 5 6 7 8 9 10 11 12
31 41 18 32 59 73 22 44
CSI2510
CSI2510 21
Autre exemple de Hachage Double
h(ki) = ki mod N
N nombre
h’(ki) = ki div N premier!
CSI2510
recherche
α = n/N C(α )
0.1 (10%) 1.05
0.5 (50%) 1.38
0.75 (75%) 1.83
0.9 (90%) 2.55
CSI2510
CSI2510 22
Chaînage vs Adressage
ouvert
CSI2510
Performance de Hachage:
Résumé
• Dans le pire cas, les
recherches, les insertions et
les suppressions dans une table • Le temps prévu de toutes les
de hachage prennent O(n) opérations du TAD
dictionnaire dans le tableau
• Le pire cas arrive quand toutes est O(1)
les clés insérées dans le
dictionnaire entrent en collision • En pratique, le hachage est
très rapide si le facteur de
• Le facteur de chargement α = chargement n'est pas près
n/N affecte les performances de 100%
d’une table de hachage
• Les applications de tableau
• Supposons que les valeurs de de hachage:
hachage sont comme des
nombres aléatoires, il peut être – Petite base de données
montré que le nombre prévu de – compilateurs
sondages pour une insertion – Cache des navigateurs
avec adressage ouvert est CSI2510 – P2P
1 / (1 - α)
CSI2510 23