La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Gestion de Fichiers Hachage. 2 Motivation La recherche séquentielle peut être faite en temps daccès dordre O(N), ce qui veut dire que le nombre de seeks.

Présentations similaires


Présentation au sujet: "Gestion de Fichiers Hachage. 2 Motivation La recherche séquentielle peut être faite en temps daccès dordre O(N), ce qui veut dire que le nombre de seeks."— Transcription de la présentation:

1 Gestion de Fichiers Hachage

2 2 Motivation La recherche séquentielle peut être faite en temps daccès dordre O(N), ce qui veut dire que le nombre de seeks augmente au même taux que la taille du fichier. Les arbres B diminuent ce taux puisquils permettent un temps daccès dordre O(Log k N) ou k est une mesure de la taille dune feuille (i.e., le nombre denregistrements qui peuvent être sauvegardé dans une feuille). Nous verrons les arbres B plutard. Ce que lon voudrait, cependant, est un temps daccès dordre O(1) ce qui veut dire que quelque soit la taille du fichier le temps daccès à un enregistrement est toujours un petit nombre de seeks. Hachage statique est une technique permettant datteindre une telle performance si la taille du fichier ne varie pas.

3 3 Définition Une fonction de hachage (hash function) est une fonction (mathématique) h qui peut transformer une clé K en une adresse h(K). Le résultat h(K) du hachage est utilisé pour stocker lenregistrement corespondant à la clé K. Le hachage ressemble aux indexes associant une clé avec une adresse relative denregistrement. Hachage versus construction dindexes: Avec le hachage, il ny a pas de connection évidente entre la clé et ladresse (randomizing). Avec le hachage, deux clés différentes peuvent être transformées en la même adresse (collision).

4 4 Exemple de fonction de hachage On veut stocker 75 enreg.s dans un fichier. la clé est le nom de famille. Un espace pour 1000 enreg.s est reservé. Soit pl(K) := 1ère lettre de K, dl(K) := 2ème lettre de K. Soit tdl(N) := les trois derniers chiffres de N. h(K) = tdl(ASCII(pl(K)) * ASCII(dl(K))). Le résultat h(K) appliquée à une portion du fichier: Nom ASCII(pl(K)) ASCII(dl(K)) Produit Adresse domiciliaire BALL *65 = LOWEL *79= TREE *82= Les adresses qui apparaissent avoir été trouvés au hasard.

5 5 Collisions Lorsque deux clés différentes produisent la même adresse, il y a une collision. Les clés impliquées dans cette collision sappellent des synonymes. Exemple de collision: h(OLIVER) = h(LOWELL) = 004. Néanmoins, il est très difficile de trouver une fonction de hachage qui évite les collisions (« perfect haching»). Permettre les collision et trouver des moyens de les résoudre est plus simple à faire. Solutions Possible: Espacer les enregistrements Utilisation de mémoire supplémentaire Placement de plus dun enregistrement à une adresse.

6 6 Collisions: solutions possibles Espacer les enregistrements: éviter des regroupement denregistrements autour dun nombre réduit dadresse en cherchant des fonction de hachage qui distribue les enregistrements de la manière la hasardeuse possible. Notre h(K) précédent est mauvais à cet égard car il y a des combinaisons de lettres plus fréquentes que dautres. Utiliser de la mémoire supplémentaire: Ceci est possible si lespace réservé au fichier excède de loin lespace occupé par les enregistrements. Placer plus dun enregistrement à une adresse: réserver suffisament despace physique pour enregistrer les plus denreg.s logiques possible. Une adresse stockant plusieurs enreg.s est appelée compartiment («bucket»).

7 7 Un algorithme simple de hachage Etape 1: représentation numérique de la clé. Si la clé est déjà en forme numérique, passez à létape 2, sinon utilisez toutes les lettres de la clé et transformez les en code ASCII. Par exemple LOWELL Ici, nous supposons que le champ-clé a une longeur fixe de 10 octets. LOWELL occupant les 6 premiers octets, le reste est un espace vide (blanks).

8 8 Un algorithme simple de hachage (suite) Etape 2: plier et ajouter (fold and add). Découpez le résultat de létape 1 en pièces de deux nombre ASCII chacune et additionnez ces pièces. P.ex. LOWELL | | | | | La somme sur lexemple ci-haut donne: = Si p.ex. MaxInt=32767 (15bits), on a un dépassement de capacité ! Un moyen de traiter ce problème est: sassurer que chaque résultat intermédiaire est plus petit que MaxInt. Une méthode pour ce faire est ((((((( )mod N)+7676)mod N)+3232) mod N) …+3232) Le choix de N doit être judicieux et souvent cest un nombre premier.

9 9 Un algorithme simple de hachage (suite) Etape 3: diviser par la taille du fichier et utiliser le reste comme adresse. Lintuition derrière cette étape est de réduire la taille du nombre produit à létape 2 afin que ce nombre nexcède pas la taille du fichier. Méthode: a = s mod n; a = adresse à produire, s = somme produit à létape 2, n = taille du fichier. Notez que a sera un nombre entre 0 et n-1.

10 10 Un algorithme simple de hachage (suite) Ceci est un exemple de code C++ pour lalgorithme simple de hachage utilisant un choix de N=19937 dans létape 2. Int Hash (char key[12], int numUsedAddresses, int maxAddress) { int sum = 0; for (int = 0; j < 12; j += 2) sum = (sum * numUsedAddresses * key[j] * key[j+1]) % 19937; return sum % maxAddress; }

11 11 Fonctions hachage et distribution denregistrements Les enregistrements peuvent être distribués sur toutes les adresses de manières différentes: Il peut y avoir (a) aucun synonymes (distribution uniforme); (b) que des synonymes (pire cas); (c) quelques synonymes (cela arrive avec des distributions au hasard – random distribution). Les distributions uniformes pures sont difficiles à obtenir et ne valent pas la peine dêtre cherchées. Les distributions au hasard peut être facilement derivées mais elles ne sont pas parfaites car elles peuvent générer un nombre important de synonymes. On veut des méthodes de hachage meilleures que cela.

12 12 Dautres méthodes de hachage Bien quil nexiste pas de fonction de hachage qui garantisse des distributions meileures que les distributions au hasard dans tous les cas, si on considère le clés qui vont être hachées, certaines améliorations sont possibles. Voici quelques méthodes qui sont potentiellement meilleures que les méthodes au hasard: Examiner les clés pour trouver un patron Plier certaines parties de la clé Diviser la clé par un nombre (p.ex. premier) Elever la clé au carré et prendre le milieu (mid-square method): p.ex. K=453 carré= milieu = 52 Radix transformation: base mod 99.


Télécharger ppt "Gestion de Fichiers Hachage. 2 Motivation La recherche séquentielle peut être faite en temps daccès dordre O(N), ce qui veut dire que le nombre de seeks."

Présentations similaires


Annonces Google