Cours PDF - Zegour

Download Report

Transcript Cours PDF - Zegour

Hachage Linéaire
PR ZEGOUR DJAMEL EDDINE
ECOLE SUPÉRIEURE D’INFORMATIQUE (ESI)
HTTP://ZEGOUR.ESI.DZ
EMAIL:
[email protected]
Hachage Linéaire
Introduction
Hachage classique limité aux données statiques  domaines d’utilisation
restreints.
La plupart des applications utilisent les données dynamiques  maintenir
Un bon accès aux données ( insertions et suppressions fréquentes)
Hachage Linéaire
Du hachage classique au hachage dynamique
Le hachage classique (au sens de KNUTH) suppose que la fonction de
Hachage est statique.
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  dégradation des
performances d'accès.
Pour le hachage dynamique :
- Une insertion ou une suppression peut commencer par une fonction de
hachage et terminer par une autre.
- En plus, l'espace des adresses possibles n'est plus limité.
Hachage Linéaire
Présentation
Utilise une famille de fonctions de hachage : h0, h1, h2, …
hi(d) = d mod 2iN
Propriété importante
hi+1(d) = hi(d)
hi+1(d) = hi(d) + 2iN
Au départ : une table de N cases.
1 case = b données + 1 pointeur vers une liste de données
Hachage Linéaire
Situation initiale
0
1
2
N-1
P
Paramètres du fichier : Niveau (i) et P (Prochaine case à éclater)
Au départ:
i=0 (Niveau )
P=0 ( Prochaine case à éclater)
Hachage Linéaire
Cas d’éclatement
0
1
2
m
2iN-1
P
Collision sur une case m
La donnée est rangée en débordement selon chaînage séparé : une liste
linéaire chaînée de données
Eclatement de la case P (avec les données en débordement) avec la fonction
hi+1
Hachage Linéaire
Cas d’éclatement
0
1
2
m1
P
Une nouvelle case est rajoutée
P  P +1 (prochaine case à éclater )
2iN-1 2iN
Hachage Linéaire
Principe d’éclatement
A chaque collision sur une case m :
Si m<> P : ranger la donnée en débordement (case m) Fsi
Éclater la case P
PP+1
Si P = 2iN
P0
i i + 1
Indice de la dernière case rajoutée = 2iN + P
Indice de la prochaine case à rajouter = 2iN + P + 1
Hachage Linéaire
Recherche d’une donnée d
m  hi(d)
Si m < P
Fsi
m  hi+1(d)
Rechercher la donnée dans la case m
Si d n’est pas dans m et m Pleine:
rechercher dans la liste des débordements
Hachage Linéaire
Implémentation
N
Niveau 0
2N
Niveau 1
4N
Niveau 2
8N
Niveau 3
.
.
.
Hachage Linéaire
Implémentation
Table
Taille :M
Correspondance:
Indice dans Table = m Div M
.
.
.
Déplacement dans le maillon =
m Mod M
Hachage Linéaire
Performances
De l’ordre d’une comparaison pour recherche une donnée quelque
soit la taille du fichier
Données dynamiques
Pas d’ordre