• Aucun résultat trouvé

ALGO1 – Table de hachage

N/A
N/A
Protected

Academic year: 2022

Partager "ALGO1 – Table de hachage"

Copied!
8
0
0

Texte intégral

(1)

ALGO1 – Table de hachage

Fran¸cois Schwarzentruber September 19, 2020

1 Motivation

Rˆeve : impl´ementer efficacement les types abstraits ensemble et tableau associatif

1.1 Algorithmique

Somme de nombres On veut par exemple savoir s’il existe deux nombres a et b dans un tableau T tel que a+b= 0. Voici un algorithme enO(n) :

• On met tous les ´el´ements dans une structure de donn´ees avec un acc`es enO(1) ;

• On parcourt les ´el´ementsadu tableau et on teste si−ase trouve dans la structure de donn´ees.

Relation sym´etrique Tester si une relation donn´ee sous la forme d’une liste de paires (a, b) est sym´etrique.

1.2 Texte : mots les plus fr´ equents

Etant donn´´ e un roman, quels sont les 100 mots les plus fr´equents ?

1.3 Base de donn´ ees

On a une liste de triplets (prixapayer, client). On souhaite en temps lin´eaire calculer pour chaque client le prix total qu’il doit payer.

1.4 Dans un compilateur/interpr´ eteur

Pour stocker l’association entre nom de variables et donn´ees.

2 D´ efinition

D´efinition 1 Une table de hachage par chaˆınage est une structure de donn´ees compos´ee d’un tableau avecM cases, chacune contenant une liste chaˆın´ee.

...

... 0

M−1

h(s) s s0

liste chaˆın´ee

fonction contient(s)

retourner liste contient(T[h(s)], s) fonction ajouter(s)

retourner liste ajouter(T[h(s)], s) fonction supprimer(s)

retourner liste supprimer(T[h(s)], s)

D´efinition 2 (alv´eole) Une case du tableau s’appelle une alv´eole.

(2)

D´efinition 3 (collision) Une collision est un ensemble de 2 clefs log´ees dans la mˆeme alv´eole.

Notations

Ω = l’univers des mondes possibles (pour parler de probabilit´es) K = l’ensemble des clefs possibles (pas forc´ement dans la table) n = nombre de clefs pr´esentes dans la table

M = nombre d’alv´eoles dans la table h = fonction de hachage

aj = nombre de clefs dans l’alv´eole num´eroj α=Mn = facteur de remplissage

3 Hachage uniforme

D´efinition 4 (Hypoth`ese du hachage uniforme simple) SoitK: Ω→Kest une variable al´eatoire repr´esentant une clef. La clef K v´erifie l’hypoth`ese de hachage uniforme simple si pour tout alv´eole j∈ {0, . . . , M−1},

P(h(K) =j) = 1 M. demo: Hachage uniforme

Dans ce cas l`a, on a la proposition suivante, avec≤car les ´el´ements qu’on ajoute peuvent ˆetre ´egaux et il n’y a pas de doublons :

Proposition 5 Supposons que l’on a ajout´en´el´ements : K1, . . . , Kn : Ω→Ksous l’hypoth`ese de hachage uniforme simple. On a alors pour toutj∈ {0, . . . , M−1},

E(aj)≤α= n M.

D´emonstration. SoitP une propri´et´e. On note 1P la fonction de Ω→ {0,1}qui vaut 1 si la propri´et´eP est vraie et 0 sinon.

Le nombre de tentatives d’ajout d’une clef dans l’alv´eole num´ero j

vautPn

i=11h(Ki)=j. On a donc :

aj

n

X

i=1

1h(Ki)=j.

Le≤provient du fait qu’il peut y avoir des clefs ´egales. Par lin´earit´e de l’esp´erance : E(aj) ≤E(Pn

i=11h(Ki)=j)

=Pn

i=1E(1h(Ki)=j)

=Pn

i=1P(h(Ki) =j)

=Pn i=1

1 M

= Mn

Corollaire 6 Les op´erations d’ajout, suppression et recherche sontO(1 +α)en moyenne.

4 Hachage universel

Probl`eme : Un intrus qui connaˆıt la fonction de hachage peut attaquer la table de hachage.

demo: Hachage uniforme : attaque

Solution : choisir al´eatoirement une fonction de hachageH.

Exemple 7 Soitpun nombre premier et supposonsK=Z/pZ. SoitD=Z/pZ×Z/pZ. Tirer al´eatoirement uniform´ement (a, b)dansDet choisir comme fonction de hachage

hab: Z/pZ → {0, . . . , M−1}

k 7→ ((ak+b)[p])[M].

demo: Hachage universel

(3)

4.1 Fonction de hachage al´ eatoire universelle

D´efinition 8 SoitH : Ω→(K→ {1, . . . , M})une fonction de hachage al´eatoire est universelle si pour toute paire de clef (k, `)∈Ktel quek6=`, on a

P(H(k) =H(`))≤ 1 M.

Th´eor`eme 9 Supposons queH est une fonction de hachage al´eatoire universelle. Alors pour tout ´el´ementsx1, . . . , xn

distincts deux `a deux, pour toutx, apr`es l’insertion de x1, . . . , xn on a : E(aH(x))≤ n

M + 1.

D´emonstration.

E(aH(x)) =E(Pn

i=11H(xi)=H(x))

=Pn

i=1E(1H(xi)=H(x))

=Pn

i=1P(H(xi) =H(x)) Sixi=x,P(H(xi) =H(x)) = 1. Sixi6=x,P(H(xi) =H(x))≤M1. D’o`u le r´esultat.

4.2 L’exemple est une classe universelle (*)

Th´eor`eme 10 (admis) Soit D = Z/pZ×Z/pZ. Si on tire al´eatoirement uniform´ement (a, b) dans D, alors la variable al´eatoirehab de l’exemple 7 est universelle.

D´emonstration. Rappel :

hab: Z/pZ → {0, . . . , M−1}

k 7→ ((ak+b)[p]

| {z }

fab(k)

)[M].

Par d´efinition, montrer quehabest universelle revient `a montrer que pour toute paire de clef (k, `) tel quek6=`, on a

|{(a, b)∈ D |hab(k) =hab(`)}| ≤ |D|

M . Il faut montrer que pour toute paire de clef (k, `) tel quek6=`, on a

|{(a, b)∈ D |fab(k) =fab(`)[M]}| ≤ |D|

M . SoitS ={(r, s)∈Z/2pZ|r6=s}. Soitk, `∈U telles quek6=`. Posons

θ: D → S

(a, b) 7→ (fab(k), fab(`)) Lemme 11 θ est une bijection.

D´emonstration. Bien d´efini θ est bien `a valeurs dansS. En effet :

• D’une part,fab(k), fab(`)∈Z/pZ par d´efinition defab.

• D’autre part fab(k) 6= fab(`). En effet, par d´efinition de fab(..), il faut montrer que ak+b 6= a`+b[p].

Autrement dit, il faut montrer quea(k−`)6= 0[p]. Mais : – a6= 0 (par d´efinition deD).

– Et comme pest plus grand que les valeurs des clefs (ie. k < pet ` < p), et k−` 6= 0 implique que (k−`)6= 0[p].

CommeZ/pZ est int`egre, on a biena(k−`)6= 0[p]. CQFD.

Surjection

Pour tout (r, s)∈ S, montrons qu’il existe (a, b)∈ Dtel que θ(a, b) = (r, s). Le candidat (a, b) est :

(4)

• a= (r−s)(k−`)−1[p];

• b= (r−ak)[p].

On remarque que commek6=` et commer6=s, alors par int´egrit´e deZ/pZ,a6= 0[p]. Donc (a, b)∈ D.

D’autre part,

θ(a, b) = (ak+b, a`+b)

= (ak+ (r−ak)

| {z }

b

, (r−s)(k−`)−1

| {z }

a

`+r−(r−s)(k−`)−1

| {z }

a

k

| {z }

b

)

= (r, (r−s)(k−`)−1(`−k) +r)

= (r, s−r+r)

= (r, s).

Conclusion

Comme|D|=|S|, on en conclut queθest une bijection.

Vu queθest une bijection, on a :

|{(a, b)∈ D |fab(k) =fab(`)[M]}|=|{(r, s)∈ S |r=s[M]}|.

Ainsi, l’objectif est de montrer que :

|{(r, s)∈ S |r=s[M]}| ≤ |S|

M. Pour unr∈Z/pZfix´e,

|{s∈Z/pZ|(r, s)∈ S et r=s[M]}|

=|{s∈Z/pZ|(r, s)∈Z/2pZ etr6=s[p] etr=s[M]}|

p M

−1

p+MM−1−1 = p−1M

(5)

Exemple 12 Par exemple pour r= 0, voici les candidats (en noir) espac´es deM :

0 p−1

Ainsi,

|{(r, s)∈ S |r=s[M]}| ≤pp−1 M =|S|

M

4.3 Nombre de collisions

Lemme 13 SoitH une fonction de hachage al´eatoire avec l’hypoth`ese d’universalit´e. On a :

E(nb de collisions obtenues avecH)≤ n

2 1

M. D´emonstration. Etant donn´e deux clefsket `, on d´efinit

Xk,`= 1ket`donne une collision avecH= 1H(k)=H(`). On a, en notantX le nombre de collisions obtenues avec H :

X = X

{k,`}o`uk, `dans la table|k6=`

Xk,`.

Par lin´earit´e de l’esp´erance on a :

E(X) = X

{k,`}o`uk, `dans la table|k6=`

E(Xk,`) Mais

E(Xk,`) =P(Xk,`= 1)

=P(H(k) =H(`))

M1 carH est universelle.

On a :

E(X) = X

{k,`}o`uk, `dans la table|k6=`

E(Xk,`)≤ X

{k,`}o`uk, `dans la table|k6=`

1 M ≤

n 2

1 M.

5 Hachage parfait

Probl`eme : les complexit´es sont en moyenne mais pas dans le pire cas.

Solution : ´etant donn´e n cl´es fix´ees et connues, compiler une structure de donn´ees pour avoir un acc`es pire cas enO(1) et un espace m´emoire enO(n)

5.1 Etape 1 : table avec acc` es O(1) et taille O(n

2

)

demo: Hachage parfait

(6)

...

... 0

n2−1

h(s) s s0

liste chaˆın´ee

Th´eor`eme 14 PosonsM =n2. SoitH une fonction de hachage choisie al´eatoire l’hypoth`ese d’universalit´e. Alors : P(pas de collision avecH)> 1

2.

D´emonstration. SoitX le nombre de collisions que l’on a avecH. Via le lemme 11, on a : E(X)≤n(n−1)

2 1 n2 <1

2.

Rappel de l’in´egalit´e de Markov : P(X ≥t)≤E(X)t . Ici, pourt= 1, on obtientP(X ≥1)≤ 12., et donc P(X= 0)>12.

Solution : tirer al´eatoirementhdansHet s’arrˆeter quand on n’a pas de collision.

Th´eor`eme 15 Il faut en moyenne 1−pp essais pour avoir une fonction de hachage qui ne donne pas de collisions, o`upest la probabilit´e de ne pas avoir de collisions.

D´emonstration. SoitT le nombre d’essais rat´es jusqu’`a ne pas avoir de collision.

P(T = 0) =p P(T = 1) = (1−p)p ...

P(T =k) = (1−p)kp ...

Rappel que : P

0 kxk :=(1−x)x 2

Ainsi,E(T) =P

0 kP(T =k) =P

0 k(1−p)kp=p(1−(1−p))1−p 2 = 1−pp .

La fonctionp7→ 1−pp est d´ecroissante enpet vaut 1 en 12. Il faut donc en moyenne ”moins de 1 tirage” pour ne pas avoir de collision.

5.2 Etape 2 : obtenir une taille en O(n)

On construit une structure `a deux niveaux :

1. Premier niveauavecM =nalv´eoles, avec une fonction de hachageh. Il peut y avoir des collisions.

2. Dans l’alv´eole num´ero j du premier niveau, on met une table de hachage sans collision Tj. On utilise le principe de la sous-section pr´ec´edente, i.e. on met aj2 sous-alv´eoles dansTj o`u aj = le nombre d’´el´ements dans l’alv´eole num´eroj.

On montre que l’on peut choisirhdu premier niveau tel que l’espace du deuxi`eme niveauPM−1

j=0 aj2=O(n).

(7)

Th´eor`eme 16 PosonsM =n. SoitH une fonction de hachage al´eatoire universelle. SoitajH la variable al´eatoire qui repr´esente le nombre d’´el´ements dans l’alv´eole num´eroj aupremier niveau avec H. Alors :

E(

M−1

X

j=0

ajH2 )<2n.

D´emonstration. On va calculerPM−1 j=0 ajH2

.

Rappel : on a l’´egalit´e pour touta∈N: a2=a+ 2 a2 . On a :

M−1

X

j=0

ajH2

=

M−1

X

j=0

ajH

| {z }

n

+2

M−1

X

j=0

ajH

2

| {z }

X

En fait, X est le nombre de collisions dans la table de hachage principale. En effet, aj2H

est le nombre de couples de clefs{k, `} aveck6=` o`uH(k) =H(`) =j. En faisant la somme, on compte toutes les collisions.

Ainsi, on a :

E(PM−1 j=0 ajH2

) ≤n+ 2E(X) par la lin´eairit´e de l’esp´erance

≤n+ 2 n21

n par le lemme 11

≤n+ 2n−12

<2n.

5.3 Construction de la structure

1. On tire au hasardhpour lepremier niveaujusqu’`a avoirPM−1

j=0 aj2<4n.

La probabilit´e d’avoirPM−1

j=0 aj2<4nest minor´e par P(PM−1

j=0 aj2<4n) = 1−P(PM−1

j=0 aj2≥4n)

≥1−E(

PM−1 j=0 ajH2)

4n in´egalit´e de Markov

>1−2n4n

>12.

2. Pour toutj, pour latable de hachage secondairedans l’alv´eole num´eroj, on choisit une fonction de hachagehj

qui ne donne pas de collision (cf. sous-section 4.1).

6 Notes bibliographiques

Cette note de cours r´esume le chapitre sur les tables de hachage de [CLRS09]. A la fin du chapitre, ils indiquent que Donald Knuth attribue l’inention des tables de hachage `a Hans Peter Luhn. Le hachage parfait avec des clefs statiques a ´et´e propos´e dans [FKS84]. Le cas dynamique, avec des ajouts et suppressions enO(1) en cout amorti est propos´e dans [DKM+94].

(8)

References

[CLRS09] Thomas H Cormen, Charles E Leiserson, Ronald L Rivest, and Clifford Stein.Introduction to algorithms.

MIT press, 2009.

[DKM+94] Martin Dietzfelbinger, Anna R. Karlin, Kurt Mehlhorn, Friedhelm Meyer auf der Heide, Hans Rohnert, and Robert Endre Tarjan. Dynamic perfect hashing: Upper and lower bounds. SIAM J. Comput., 23(4):738–761, 1994.

[FKS84] Michael L. Fredman, J´anos Koml´os, and Endre Szemer´edi. Storing a sparse table with 0(1) worst case access time. J. ACM, 31(3):538–544, 1984.

Références

Documents relatifs

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

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

calcul r´ ealis´ e par une fonction de hachage : transforme la valeur de l’´ el´ ement en une adresse dans un tableau.. recherche d’un ´ el´ ement : nombre constant de

Master 2 Recherche Math´ ematiques Appliqu´ ees Examen de Processus Stochastiques. Le 11 janvier 2013 (dur´ ee

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 