structures de données ift-10541 abder alikacem les tables de dispersion résumé département...
TRANSCRIPT
Structures de donnéesIFT-10541
Abder AlikacemAbder Alikacem
Les tables de dispersionRésumé
Département d’informatique et de génie logiciel
Édition septembre 2009
! +
Synthèse
• L’adressage associatif• Tables de dispersion• Fonctions de dispersion• Résolution de conflits• Listes de collisions
espace d’adressage virtuel
espace d’adressage réel
• L’adressage associatif• Placer une information dans une structure en fonction d'une partie de
cette information: la clé de recherche .• Tables de dispersion
• Replier l’espace des données• Accès par calcul: h, fonctions de dispersion• h n’est pas injective: collisions!
• Fonctions de dispersion : h• facile (rapide) à calculer
• Dispersion uniforme vers l’espace d’adressage réel
• Accepter les premières collisions lorsque le facteur de charge=70%• Résolution de conflits
• Chaînage externe (avec ou sans « buckets »). Désavantages : • Espace mémoire requis• Temps d’accès
• Adressage ouvert…
Synthèse
• Si les collisions sont concentrées aux mêmes endroits :• on perd de l’espace dans la table• temps d ’accès à l’information
• Pourquoi aller à l’extérieur de la table s’il reste de la place dans la table?• Solution #1: chaînage dans la table• Solution#2: résolution des collisions par calcul, redispersion
• Fonctions de redispersion constantes• Problème du regroupement primaire: partage des listes de collisions• Fonctions de redispersion quadratiques, aléatoires..• Le regroupement secondaire: h(el1) = h(el2) 1 même chaîne!• départager les chaînes de collisions de el1 et el2
• (r0 = 0, r1, r2, r3, r4, r5, ..., rm-1) une permutation aléatoire des adresses de
la table propre à l’élément recherché (ou à insérer). p(eli) = rj-1,eli (où
j est l’itération et eli = « seed »)• « double hashing »
• h1(el1) = i (= h1(el2))
• h2(el1) = k (≠ h2(el2))
• p(el1) = (j-1)*k (où j est l’itération)
Synthèse
Problème : listes de collisions
Structure d’arbre :• O(log n) pour la recherche et les mises à jour
(incluant rebalancements)
Table de dispersion :• de O(1) à O(n) pour la recherche• dépend de la longueur des listes de collisions
• de la charge (densité) de la table• de la fonction de dispersion• de la politique de prise en compte des collisions• des regroupements de listes de collisions
Problème : listes de collisions
Regroupement des listes de collisions
• problème de l’adressage ouvert !!!• regroupement primaire• regroupement secondaire
Solutions (1)• Maintenir les listes de collisions triées :
• par ordre des clés• par ordre de fréquence d’accès
• Quels en sont les problèmes pour :• le chaînage externe :
• le chaînage par « buckets » :
• l’adressage ouvert :
Solutions (1)• Maintenir les listes de collisions triées :
• par ordre des clés• par ordre de fréquence d’accès
• Quels en sont les problèmes pour :• le chaînage externe :
• insertions + longues• le chaînage par «buckets» :
• l’adressage ouvert :
Solutions (1)• Maintenir les listes de collisions triées :
• par ordre des clés• par ordre de fréquence d’accès
• Quels en sont les problèmes pour :• le chaînage externe :
• insertions + longues• le chaînage par « buckets » :
• réorganisation de plusieurs (?) secteurs• l’adressage ouvert :
• Maintenir les listes de collisions triées :• par ordre des clés• par ordre de fréquence d’accès
• Quels en sont les problèmes pour :• le chaînage externe :
• insertions + longues• le chaînage par « buckets » :
• réorganisation de plusieurs (?) secteurs• l’adressage ouvert :
• effet Domino
Solutions (1)
• Connaître la fin des listes de collisions :• utilisation d’un « pass bit »
• à 1 lorsque l’élément n’est pas le dernier• à 0 sinon
Solutions (2)
Exemple : « pass bit »
• i i - p(el)si i < 0 alors i i + m
• p(el) = 1 pour tout élément el• + : M13, Y25, G7, Q17
• + : R18 6
0
1
2
3
4
5
6
M 0
info pass bit
0S 1
0
00
7
8
9
10
Q 0
0 0
00
Y 0
G 0
0
Exemple : « pass bit »
• i i - p(el)si i < 0 alors i i + m
• p(el) = 1 pour tout élément el• + : M13, Y25, G7, Q17
• + : R18 6, 5
0
1
2
3
4
5
6
M 0
info pass bit
0S 1
0
00
7
8
9
10
Q 0
0 0
00
Y 0
G 1
0
Exemple : « pass bit »
• i i - p(el)si i < 0 alors i i + m
• p(el) = 1 pour tout élément el• + : M13, Y25, G7, Q17
• + : R18 6, 5, 4
0
1
2
3
4
5
6
M 0
info pass bit
0S 1
0
00
7
8
9
10
Q 1
0 0
00
Y 0
G 1
0
Exemple : « pass bit »
• i i - p(el)si i < 0 alors i i + m
• p(el) = 1 pour tout élément el• + : M13, Y25, G7, Q17
• + : R18 6, 5, 4
0
1
2
3
4
5
6
M 0
info pass bit
0S 1
0
00
7
8
9
10
Q 1
0 0
00
Y 0
G 1
R 0
Exemple : « pass bit »
• i i - p(el)si i < 0 alors i i + m
• p(el) = 1 pour tout élément el• + : M13, Y25, G7, Q17
• + : R18 6, 5, 4• + : Z26 3
0
1
2
3
4
5
6
M 0
info pass bit
0S 1
0
00
7
8
9
10
Q 1
0 0
00
Y 0
G 1
R 0
Exemple : « pass bit »
• i i - p(el)si i < 0 alors i i + m
• p(el) = 1 pour tout élément el• + : M13, Y25, G7, Q17
• + : R18 6, 5, 4• + : Z26 3
0
1
2
3
4
5
6
M 0
info pass bit
Z 0S 1
0
00
7
8
9
10
Q 1
0 0
00
Y 0
G 1
R 0
Exemple : « pass bit »
• i i - p(el)si i < 0 alors i i + m
• p(el) = 1 pour tout élément el• + : M13, Y25, G7, Q17
• + : R18 6, 5, 4• + : Z26 3• + : S19 7
0
1
2
3
4
5
6
M 0
info pass bit
Z 0S 1
0
00
7
8
9
10
Q 1
0 0
00
Y 0
G 1
R 0
Exemple : « pass bit »
• i i - p(el)si i < 0 alors i i + m
• p(el) = 1 pour tout élément el• + : M13, Y25, G7, Q17
• + : R18 6, 5, 4• + : Z26 3• + : S19 7
0
1
2
3
4
5
6
M 0
info pass bit
Z 0S 1
0
00
7
8
9
10
Q 1
S 0 0
00
Y 0
G 1
R 0
Exemple : « pass bit »
• i i - p(el)si i < 0 alors i i + m
• p(el) = 1 pour tout élément el• + : M13, Y25, G7, Q17
• + : R18 6, 5, 4• + : Z26 3• + : S19 7• rechercher : P16 4
0
1
2
3
4
5
6
M 0
info pass bit
Z 0S 1
0
00
7
8
9
10
Q 1
S 0 0
00
Y 0
G 1
R 0
Exemple : « pass bit »
• i i - p(el)si i < 0 alors i i + m
• p(el) = 1 pour tout élément el• + : M13, Y25, G7, Q17
• + : R18 6, 5, 4• + : Z26 3• + : S19 7• rechercher : P16 4• rechercher : R18 6, 5, 4
0
1
2
3
4
5
6
M 0
info pass bit
Z 0S 1
0
00
7
8
9
10
Q 1
S 0 0
00
Y 0
G 1
R 0
Exemple : « pass bit »
• i i - p(el)si i < 0 alors i i + m
• p(el) = 1 pour tout élément el• + : M13, Y25, G7, Q17
• + : R18 6, 5, 4• + : Z26 3• + : S19 7• rechercher : P16 4• rechercher : R18 6, 5, 4• rechercher : H8 7
0
1
2
3
4
5
6
M 0
info pass bit
Z 0S 1
0
00
7
8
9
10
Q 1
S 0 0
00
Y 0
G 1
R 0
Opérations
Recherche• O(1) si collisions bien gérées
Insertion• recherche + gestion des collisions : O(recherche)
Enlèvement (chaînage externe)• listes de collisions externes
• gestion de listes chaînées• gestion de tableaux d’éléments
Enlèvement (adressage ouvert)• listes de collisions entremêlées on ne peut pas ôter
les éléments de la table• + bit de présence/absence• + reconstruction de la table de dispersion
Index et tables de dispersion
Idée générale
• Deux fichiers sont utilisés. Le premier contient la table de dispersion qui donne la relation entre le résultat de la fonction de dispersement et la position des enregistrements dans le fichier. Ce fichier est appelé un index.
• Le deuxième renferme la base de données, ordonnée de façon logique.
Exemple
{27, "bleu"}
{18, "blanc"}
{29, "rouge"}
{28, "noir"}
{39, "vert"}
{13, "gris"}
{16, "mauve"}
{42, "cyan"}
{17, "rose"}
012345678910
Fichier d'index = Table de dispersion
0
Clé LienI LienE
29 -1 2
18 10 1
28 9 3
13 -1 5
27 8 0
16 -1 6
39 4 4
42 3 7
17 -1 8
1
2
3
4
5
6
7
8
9
10
Fichier principal
Résumé des complexités
Recherche Insertion Retrait
Méthode Séquentielle
O(N/2) O(1) O(N)
Dichotomie O(logN) O(N) O(N)
Arbre binaire de recherche
O(logN) O(logN) O(logN)
"Haching" (dispersion)
O(1) O(1) O(1)
Complexité en moyenne
Résumé des complexités (suite)
Complexité au pire
Recherche Insertion Retrait
Méthode Séquentielle
O(N) O(1) O(N)
Dichotomie O(logN) O(N) O(N)
Arbres binaires
O(N) O(N) O(N)
"Hashing"(dispersion)
O(N) O(N) O(N)