Please enable JavaScript.
Coggle requires JavaScript to display documents.
Les tables de dispersion (Fonction de hachage (:warning: Doit absolument…
Les tables de dispersion
-
Utilité
-
:timer_clock: Obtenir « presque toujours » un temps O(1) pour les opérations de dictionnaire, on utilise une fonction de hachage
-
Fonction de hachage
:star: Fonction de hachage h transforme la clé x, identifiant chaque élément, en un index i d’un tableau que l’on appelle table de dispersion (‘’hash table’’)
-
:warning: Collision
On dit qu’il y a une collision lorsque deux
clés différentes x1 et x2 sont ‘hachées’
vers le même index h(x1) = h(x2)
-
:timer_clock: Le temps d’exécution de h(x) ne dépend que de x (et non du nombre n d’éléments stockés dans le tableau de taille N)
:timer_clock: Le temps d’accès à une case h(x) est alors en O(1) car indépendant de n. (mais il dépend de la taille |x| de la clé x)
-
-
-
Éviter les collisions
Chaînage externe
Tableau de listes
-
h(x) nous donne la liste à utiliser pour
trouver(x), enlever(x) et ajouter(x)
Pour le cas d’un map: chaque noeud contient
une paire (clé, valeur)
-
-
-
:red_cross: Nécessité d’allouer dynamiquement la mémoire à chaque insertion (normalement avec un push_back() ou push_front())
Re-hachage
On « re-hachera » tous les éléments après avoir augmenter la taille du tableau, ce qui entraînera le dépeuplement des listes chaînée
:timer_clock: Le temps d’exécution moyen des
recherches/insertions/suppressions dans une table de hachage avec
chaînage externe est en O(1) lorsque le taux d’occupation λ ≤ 1.
:timer_clock: Puisque le re-hachage s’effectue lorsque n = N+1, le coût total du rehachage est donc en Θ(n)
Adressage ouvert
Re-adressage
Lorsque qu’une clé entre en collision avec une autre, on positionne cette clé dans une autre position de la table (ré-adressage)
-
L’adressage ouvert nécessite aussi la présence d’un champ état pour
chaque entrée de la table de dispersion et qui indique l’état de cette
entrée
-
Sondage linéaire
Le sondage f utilisé est linéaire, i.e., f(i) = i
Cela signifie qu’après avoir subi la ième collision, on tente d’aller à
la case ( h(x) + i ) mod N
S’il y a encore une collision (un élément se trouve dans la case
( h(x) + i mod N) ), on ira à ( h(x) + i + 1 ) mod N
-
-
Hachage universel
:warning: Une famille H de fonctions hachant ses clés dans une table de N indexes est dite universelle si pour toute paire (x,y) de clés distinctes, le nombre de fonctions h de H telle que h(x) = h(y) est au plus |H|/N.
-
:timer_clock: si la famille H est universelle, le temps moyen des recherches (calculé sur les différentes piges de h ∈ H) sera en O(1) pour toute séquence de clés lorsque la gestion des collision se fait par chainage externe.
Hachage parfait
:warning: :timer_clock: On dit que l’on est en situation de hachage parfait lorsque notre fonction de hachage possède la propriété que les recherches de clés s’effectuent en O(1) en pire cas.
Inégalité de Markov
:warning: Pour toute variable aléatoire X non négative dont l’espérance E X = µ, et pour tout entier t > 0, on a: Pr(X ≥ t) ≤ µ/t.