• Aucun résultat trouvé

Hachage parfait

N/A
N/A
Protected

Academic year: 2022

Partager "Hachage parfait"

Copied!
3
0
0

Texte intégral

(1)

Hachage parfait

Référence : Cormen, p. 277 de la 3ème édition 2011-2012

On considère que l’ensemble des clefs est fixé.

L’idée est ici d’utiliser des tables de hachage à deux niveaux :

– Le premier niveau est identique au hachage par chainage : on hachenclefs dansmcases grâce à une fonction de hachagehbien choisie dans une famille de fonctions de hachage universelles.

– Plutôt que de créer une liste chaînée des éléments hachés en casej, on utilise une seconde table de hachage Sj associée à une fonction de hachagehj.

En choisissant bienhj, on peut assurer qu’il n’y aura pas de collision dans ce second niveau.

Pour cela, on supposera que la taillemj de la tableSj estn2j, oùnj est le nombre de clefs hachées en casej.

On choisithdansHp,m (oùpest une nombre premier plus grand que n’importe quelle clef), ethj∈Hp,m

j. Montrons d’abord qu’il n’y a pas de collision au second niveau :

Théorème 1

Supposons qu’on stockenclefs dans une table de hachage de taillem=n2, par une fonctionhchoisie aléatoire- ment dans une classe de fonctions de hachage universelles.

Alors la probabilité qu’il y ait une ou plusieurs collisions est moins de 12.

Démonstration. On aCn2 paires de clefs qui peuvent entrer en collision, et chaque paire entre en collision avec une probabilité m1.

SoitX la variable aléatoire qui compte le nombre de collisions. On a : EX =Cn2· 1

n2

= n2n 2 · 1

n2

< 1 2 On a alors par inégalité de Markov :

P({X >1})6EX < 1 2.

En choisissant au hasard nos fonctions de hachage, on a donc de grandes chances de tomber rapidement sur des fonctions sans collision.

Regardons maintenant l’espace occupé par cette double table.

1

(2)

Théorème 2

Supposons qu’on stockenclefs dans une table de hachage de taille m=npar une fonction de hachage choisie aléatoirement dans une classe de fonctions de hachage universelles. Alors :

E

m1

X

j=0

Nj2

<2n,

Nj est la variable aléatoire qui compte le nombre de clefs hachées en casej.

Démonstration. On utilise l’identitéa2=a+ 2Ca2.

E

m1

X

j=0

Nj2

=E

m1

X

j=0

Nj+ 2CN2j

=E

m1

X

j=0

Nj

+ 2E

m1

X

j=0

CN2j

=En+ 2E

m1

X

j=0

CN2j

=n+ 2E

m1

X

j=0

CN2j

La quantitéE Pm1

j=0 CN2j

représente le nombre total de paires de clefs qui entrent en collision. Par propriété du hachage universel, la somme vaut au plus :

Cn2 1

m =n(n−1) 2m

=n−1 2 Donc on a

E

m1

X

j=0

Nj2

6n+ 2n−1 2

= 2n−1<2n

Corollaire 3

Supposons qu’on stockenclefs dans une table de hachage de taille m=npar une fonction de hachage choisie aléatoirement dans une classe de fonctions de hachage universelles.

On choisit les tailles des tables secondaires commemj=n2j.

Alors l’espace mémoire utilisé pour toutes les tables secondaires dans le hachage parfait est en moyenne inférieur à 2n.

2

(3)

Démonstration. mj =n2j, donc c’est immédiat.

Corollaire 4

Supposons qu’on stockenclefs dans une table de hachage de taille m=npar une fonction de hachage choisie aléatoirement dans une classe de fonctions de hachage universelles.

On choisit les tailles des tables secondaires commemj=n2j.

Alors, la probabilité que l’espace mémoire utilisé pour les tables secondaires soit supérieur ou égal à 4n est moins de 12.

Démonstration. On applique l’inégalité de Markov au corollaire précédent :

P

m1

X

j=0

mj>4n

6 E

Pm1 j=0 mj

4n

<2n 4n

=1 2

Donc, en testant des fonctions de hachage aléatoirement dans une famille universelle, on en trouvera rapidement une qui utilise un espace de stockage raisonnable.

3

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 

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

On veut qu’une fonction de hachage donne une ”empreinte” (un haché) de notre donnée initiale, mais on ne veut pas qu’à partir d’une empreinte, on puisse fabriquer un message

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

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,