• Aucun résultat trouvé

Fonction de hachage

N/A
N/A
Protected

Academic year: 2022

Partager "Fonction de hachage"

Copied!
13
0
0

Texte intégral

(1)

H ACHAGE

(2)

Hachage

Hachage ? IFT2010 H2006 ? UdeM ? Mikl´os Cs˝ur¨os 1

TAD :

op´erations insert(k), delete(k), find(k) o `u k ∈ U est une cl´e (U : univers de cl´es)

Tableau de hachage : taille M on veut y placer N ´el´ements

facteur de remplissage (load factor) α = N/M

(3)

Fonction de hachage

Fonction de hachage : h: U 7→ {0,1, . . . , M − 1}

collision : h(k) = h(k0) mais k 6= k0 Birthday paradox (cl´es al´eatoires)

Probabilit´e d’aucune collision p = 1

1 − 1 M

1 − 2 M

· · ·

1 − N − 1 M

<

N−1 Y

i=0

e−i/M = exp

−(N − 1)N 2M

N > √

M2 ln 2 ≈ 1.18√

M, ⇒ au moins une collision avec probabilit´e ≥ 1/2.

(4)

Fonctions de hachage

Hachage ? IFT2010 H2006 ? UdeM ? Mikl´os Cs˝ur¨os 3

on veeut ´eviter les collisions : disperser les ´el´ements autant que possible id´ealement : h(k) a la distribution uniforme sur {0, . . . , M − 1}.

en pratique : on ne sait pas la distribution de k

(5)

Fonctions de hachage (cont)

M´ethode de la division : h(k) = k mod M

Choix de M : on veut ´eviter la r´eduction de l’espace de valeurs de hachage `a cause des donn´ees non-al´eatoires

• ne devrait pas ˆetre M = 2k (les derniers k bits de la cl´e determinents la valeur de hachage)

• puissances de 10 `a ´eviter (nombres d´ecimaux)

• ne devrait pas ˆetre un multiple de 3 (permutations d’une cl´e binaire donnent des valeurs de hachage qui diff`erent par multiples de 3)

R`egle : choisir un prime qui est loin de 2k et 10m.

(6)

Fonctions de hachage (cont)

Hachage ? IFT2010 H2006 ? UdeM ? Mikl´os Cs˝ur¨os 5

M´ethode de la multiplication : h(k) =

bM{γk}c

o `u w est la longueur d’un mot-machine et {x} = x − bxc

Choix de M : M = 2p (p bits de l’ordre sup´erieur de la moiti´e inf´erieure de Ak)

Poser γ = 2Aw

Choix de A : prime relatif `a 2w

• Ak devrait ˆetre distribu´e «uniformement»

A ≈

5−1

2 2w est un bon choix (le prime relatif le plus proche)

(7)

Hachage universel

Choisir une fonction de hachage al´eatoire :

´ecrire la cl´e de (r + 1) «caract`eres» comme x = hx0, x1, . . . , xri et calculer h(x) =

r X

i=0

hi(xi)

mod M o `u hi sont al´eatoires

et M est un prime

P.e., hi(x) = aix mod M, ai ∈ {0, . . . , M − 1} al´eatoire uniforme Collision entre x = hx0, . . . , xri et y = hy0, . . . , yri :

r X

i=0

ai(xi − yi) ≡ 0 (mod M)

(8)

R´esolution de collisions

Hachage ? IFT2010 H2006 ? UdeM ? Mikl´os Cs˝ur¨os 7

1. chaˆınage : stocker une liste pour chaque valeur de hachage 2. adressage ouvert : s´equence de sondage

(9)

Chaˆınage

Liste chaˆın´ee

Performance : longueur d’une liste en moyenne est α

Nombre de comparaisons pour recherche avec succ`es 1 + α/2 Permet α > 1

(10)

Adressage ouvert

Hachage ? IFT2010 H2006 ? UdeM ? Mikl´os Cs˝ur¨os 9

Sondage d’une s´equence de positions : d´epend de la cl´e `a ins´erer On essaie les cases h0(k), h1(k), . . .

Avec une fonction f : hi(k) = h(k) + f(i, k) mod M f : strat´egie de r´esolution de collision

M´ethodes :

• sondage lin´eaire f(i, k) = i

• sondage quadratique f(i, k) = i2

• double hachage f(i, k) = ih0(k) avec fonction de hachage auxiliaire h0 Ne permet pas α > 1

(11)

Sondage lin´eaire

(Linear probing) : h(k), h(k) + 1, h(k) + 2, . . .

Probl`eme : grappe forte (primary clustering) — blocs de cases occup´ees Nombre moyen de sondages lors de recherche fructueuse : ≈ 12

1 + 1−α1

sondages lors de recherche infructueuse ou insertion : ≈ 12

1 + 1

(1−α)2

⇒ utiliser jusqu’`a α < 0.75

(12)

Sondage quadratique

Hachage ? IFT2010 H2006 ? UdeM ? Mikl´os Cs˝ur¨os 11

(Quadratic probing) : h(k), h(k) + 1, h(k) + 4, h(k) + 9, . . .

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 du sondage que si α < 0.5

(13)

Double hachage

G´en´eralisation de sondage lin´eaire : h(k), h(k) +c, h(k) + 2c, h(k) + 3c, . . . c d´epend de la cl´e k : c = h0(k)

Exemples (´eviter c = 0 !) : h0(x) = 1 + x mod M0 avec M0 < M h0(x) = M0 − (x mod M0)

Tr`es proche d’une r´esolution id´eale

Nombre moyen de sondages lors d’insertion ou recherche infructueuse :

≈ 1 + α + α2 + · · · ≈ 1−α1

sondages lors de recherche fructueuse :

N1 PNi=0−1 1−i/M11α ln 1−α1

Références

Documents relatifs

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

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 

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,

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

Le hachage à la sortie du silo de deux ensilages à brins longs a aussi permis une augmen- tation des quantités ingérées, quoique dans une proportion plus faible ;

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