120 likes | 277 Views
Hachage Linéaire. Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI) http://zegour.esi.dz email: d_zegour@esi.dz. Hachage Linéaire. Introduction. Hachage classique limité aux données statiques domaines d’utilisation restreints.
E N D
Hachage Linéaire Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI) http://zegour.esi.dz email: d_zegour@esi.dz
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 2iN-1 2iN P Une nouvelle case est rajoutée P P +1 (prochaine case à éclater )
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 • m hi+1(d) • Fsi 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