SlideShare ist ein Scribd-Unternehmen logo
1 von 88
Downloaden Sie, um offline zu lesen
CHAPITRE VI:
HACHAGE STATIQUE
Université Saad Dahlab de Blida
Faculté des Sciences
Département d’Informatique
Licence d’Informatique
Semestre 4 (2ème année)
Algorithmique et Structures de Données
Mme AROUSSI
2014-2015
Disponible sur https://sites.google.com/a/esi.dz/s-aroussi/
 Introduction
 Principe du hachage
 Terminologie
 Fonctions de Hachage
 Méthodes de résolution de collisions
 Estimation des débordements
 Conclusion
2
PLAN DU CHAPITRE V
3
 Problématique: Supposons que l'on veuille ranger
des données (enregistrements) qui arrivent dans un
ordre quelconque dans un tableau.
 Solutions Possibles: Il existe, en général, deux façons
de les ranger :
1. Si le tableau est non ordonné alors
 Recherche est séquentielle  O(n)  Lent
 Insertion se fait à la fin du tableau  O(1)  Rapide
INTRODUCTION
4
 Solutions Possibles: Il existe, en général, deux façons
de les ranger :
1. Si le tableau est non ordonné alors
 Recherche est séquentielle  O(n)  Lent
 Insertion se fait à la fin du tableau  O(1)  Rapide
2. Si le tableau est ordonné alors
 Recherche est dichotomique  O(Log2(n)) Rapide
 Insertion provoque un décalage des éléments du tableau  O(n)
Lent
INTRODUCTION
5
 Une troisième possibilité de ranger une donnée dans un
tableau :
 Ranger la donnée « x » à un emplacement « y » calculé par une
fonction « h » tel que y = h(x)
 On parle ici de table de rangement dispersé ou technique de
HACHAGE ( en anglais "Hashing" ).
 Dans ce type de rangement, que ce soit pour insérer ou
rechercher une donnée, on procédera toujours aussi rapidement (
O(c) )
INTRODUCTION
6
PRINCIPE
x2
x4
x8
x6
x5
x1
x3
x7
x3 x8
x5
x2
x1 x7
x4
x6
0
1
2
3
4
5
6
..
N-1
..
..
Table de
Hachage « TH »
h(x)
Données à stocker
Rangement par
calcul d'adresse
La fonction « h » doit
retourner des valeurs
comprises entre 0 et N-1
Le calcul d'adresse permet de stocker des
données (x) dans une table (TH) de
taille N, en utilisant une fonction (h)
x5 ?
7
 La fonction h est appelé fonction de hachage.
 L’adresse primaire (h(x)) d’une donnée x est le résultat
retourné par la fonction de hachage h
 Les synonymes sont les données qui ont la même adresse
primaire, i.e. x1 et x2 sont des synonymes ssi h(x1) = h(x2). On
dit aussi que x1 et x2 sont en collisions.
 On parle de débordement lorsqu’il y a une donnée qui n’est
pas dans son adresse primaire. On dit aussi qu'elle est rangée
dans une adresse secondaire.
 L’adresse secondaire est déterminé par une méthode donnée,
on parle de méthode de résolution de collisions
TERMINOLOGIE
8
PRINCIPE
x2
x4
x8
x6
x1
x3
x7
x3 x8
x5
x2
x1 x7
x4
x6
0
1
2
3
4
5
6
..
N-1
..
..
Table de
Hachage « T »
h(x)
Données à stocker
Rangement par
calcul d'adresse
Pour utiliser une technique de hachage, on doit
donc définir:
1. une fonction de hachage « h »
2. une méthode de résolution des collisions
x5 ?
9
 Il s’agit de trouver une fonction h tels que 0 ≤ h(x) < N qui
réduit au maximum le nombre de collisions.
 L'idéal, c'est d'avoir une fonction de hachage bijective c'est à dire
une fonction qui attribue pour chaque donnée à insérer un
nouvel emplacement dans le tableau.
 Le pire des cas, c'est lorsque toute donnée est hachée en une
même adresse.
 Une solution acceptable est une solution où certaines données
partagent la même adresse (h est surjective).
FONCTIONS DE HACHAGE
10
 Il existe plusieurs fonctions de hachage, les plus utilisées:
1. La fonction de division
2. La fonction dite du milieu du carré « middle square »
3. La fonction dite du « transformation radix »
FONCTIONS DE HACHAGE
11
1. La fonction de division: h(x) = x MOD N
 Elle retourne le reste de la division par N où N est la taille de la
table
 C’est une fonction facile et rapide à calculer mais sa qualité
dépend de la valeur de N.
 Il est démontré que :
 c'est très mauvais de choisir N une puissance de 2.
 N premier constitue généralement un bon choix.
FONCTIONS DE HACHAGE
12
1. La fonction de division: h(x) = x MOD N
 Exemple: calculer la fonction de hachage des données
suivantes:
FONCTIONS DE HACHAGE
X N = 10 N = 11
5 5 5
55 5  collision 0
23 3 1
453 3  collision 2
Pas de collisions dans le cas où N=11 car N est un
nombre premier
13
2. La fonction du milieu du carré « middle square »
 On élève la donnée x au carré x2 et on prend les chiffres du milieu
 Cette méthode donne de bons résultats si le nombre au carré n’a
pas de zéros.
 Exemple: calculer la fonction de hachage des données suivantes :
FONCTIONS DE HACHAGE
X X2 N = 10 N = 100
500 250000 0 0
12 144 4 14 ou 44
453 205209 5 ou 2 52
14
3. La fonction de transformation radix : h(x) = (x)b MOD N
 On convertit la donnée « x » dans une base de numération « b » et
on prend le reste de la division sur « N ».
 Exemple: calculer la fonction de hachage des données suivantes
dans le cas où b = 11 et N = 10 ou 100 :
FONCTIONS DE HACHAGE
X10 X11 N = 10 N = 100
12 11 1 11
453 382 2 82
15
 En conclusion, il n’y a pas de fonction de hachage
universelle.
 Cependant, une bonne fonction doit être:
 rapide à calculer
 répartit uniformément les éléments
 Elle dépend donc:
 de la machine
 des éléments
 Mais aucune fonction n’évite les collisions, qu’il va falloir
traiter.
FONCTIONS DE HACHAGE
16
 Exercice 1: Soit E = {a, b, c, d, e, f, g, h} un ensemble
d’enregistrement. On veut insérer ces enregistrements dans une
table de hachage de 10 cases selon leur clé:
1. Calculer l’adresse primaire de chaque enregistrement dans les cas
où la fonction de hachage est une fonction :
a. De division, i.e : h(x) = x MOD N
b. Du milieu du carré, i.e on élève la donnée x au carré x2 et on
prend le chiffre du milieu
c. De transformation radix, i.e : (x)b MOD N et b = 11
FONCTION DE HACHAGE
Enregistrement
a b c d e f g h
Clé 5 51 23 453 500 12 38 42
17
 Exercice 1: Soit E = {a, b, c, d, e, f, g, h} un ensemble
d’enregistrement. On veut insérer ces enregistrements dans une
table de hachage de 10 cases selon leur clé:
1. Calculer l’adresse primaire de chaque enregistrement
FONCTIONS DE HACHAGE
Enregistrement
a b c d e f g h
Clé ou x 5 51 23 453 500 12 38 42
x MOD N 5 1 3 3 0 2 8 2
Milieu du
carré
2 6 2 5 0 4 4 7
5 0 2 6
(x)11 MOD N 5 7 1 2 5 1 5 9
18
 Lors de l'insertion de x, si l'adresse primaire h(x) est déjà
utilisée par une autre donnée, la méthode de résolution
de collision permet de trouver un autre emplacement
(libre) pour x.
MÉTHODES DE RÉSOLUTION DE COLLISIONS
19
 Pour résoudre les collisions, deux stratégies se
présentent:
a. Les méthodes directes ou le hachage par calcul de
l’emplacement:
1. Essai linéaire
2. Double hachage
b. Les méthodes indirectes ou le hachage par chainage:
3. Chainage séparée
4. Chainage interne
MÉTHODES DE RÉSOLUTION DE COLLISIONS
20
1. Essai linéaire:
 S’il se produit une collision sur la case h(x), on essaie les
cases qui la précèdent : h(x)-1, h(x)-2, h(x)-3,..., 0, N-1,
N-2, …, jusqu'à trouver une case vide.
 La rencontre d'une case vide indique que la donnée
n'existe pas.
 Il faudra sacrifier une case vide dans la table de hachage
pour que la séquence de test soit finie.
MÉTHODES DE RÉSOLUTION DE COLLISIONS
21
1. Essai linéaire: Exercice 1 (Question2. a):
MÉTHODES DE RÉSOLUTION DE COLLISIONS
Enregistrement
a b c d e f g j
h (x) 5 1 3 3 0 2 8 2
Indice Vide enregistrement
0 V
1 V
2 V
3 V
4 V
5 V
6 V
7 V
8 V
9 V
Etat initial de Table de Hachage
Indice Vide enregistrement
0 V
1 F b
2 V
3 F c
4 V
5 F a
6 V
7 V
8 V
9 V
Après l’insertion
de a, b et c
22
1. Essai linéaire: Exercice 1 (Question2. a):
MÉTHODES DE RÉSOLUTION DE COLLISIONS
Enregistrement
a b c d e f g j
h (x) 5 1 3 3 0 2 8 2
Indice Vide enregistrement
0 V
1 F b
2 F d
3 F c
4 V
5 F a
6 V
7 V
8 V
9 V
↑ collision
Calcul de h(d) -1 = 2  case vide
23
1. Essai linéaire: Exercice 1 (Question2. a):
MÉTHODES DE RÉSOLUTION DE COLLISIONS
Enregistrement
a b c d e f g j
h (x) 5 1 3 3 0 2 8 2
Après
l’insertion
de e
Indice Vide enregistrement
0 F e
1 F b
2 F d
3 F c
4 V
5 F a
6 V
7 V
8 V
9 V
↑ collision
Calcul de h(f) - 1 = 1  case pleine
Calcul de h(f) - 2 = 0  case pleine
Calcul de h(f) - 3 + 10 = 9  case vide
24
1. Essai linéaire: Exercice 1 (Question2. a):
MÉTHODES DE RÉSOLUTION DE COLLISIONS
Enregistrement
a b c d e f g j
h (x) 5 1 3 3 0 2 8 2
Après
l’insertion
de f, g
Indice Vide enregistrement
0 F e
1 F b
2 F d
3 F c
4 V
5 F a
6 V
7 V
8 F g
9 F f
↑ collision
Calcul de h(j) - 1 = 1  case pleine
Calcul de h(j) - 2 = 0  case pleine
Calcul de h(j) - 3 + 10 = 9  case pleine
Calcul de h(j) - 4 + 10 = 8  case pleine
Calcul de h(j) - 5 + 10 = 7  case vide
25
1. Essai linéaire: Exercice 1 (Question2. a):
MÉTHODES DE RÉSOLUTION DE COLLISIONS
Enregistrement
a b c d e f g j
h (x) 5 1 3 3 0 2 8 2
Après
l’insertion
de j
Indice Vide enregistrement
0 F e
1 F b
2 F d
3 F c
4 V
5 F a
6 V
7 F j
8 F g
9 F f
26
1. Essai linéaire:
MÉTHODES DE RÉSOLUTION DE COLLISIONS
Indice Vide
0 F e
1 F b
2 F d
3 F c
4 V
5 F a
6 V
7 F j
8 F g
9 F f
Enregistrement
a b c d e f g j
h (x) 5 1 3 3 0 2 8 2
Adresse Primaire P P Secondaire P S P S
La recherche de « k » (tel que h(k) = 2) s'arrête
avec un échec dans la case vide d‘indice 6 la
séquence de test est : 2, 1, 0, 9, 8, 7
 Si on devait insérer « k », la donnée serait
affectée à la case 6 (si c'est pas la dernière case
vide).
 La table est remplie quand le nombre d’éléments
insérés égale à N-1  sacrifice d’une case vide
27
1. Essai linéaire:
 La recherche d’une donnée x se déroule comme suit:
a. Calculer l’adresse primaire de x (soit i = h(x))
b. Si la case « i » de table de hachage contient la donné
x alors la recherche est terminée.
c. Sinon rechercher la donnée x dans les cases qui la
précèdent : i-1, i-2, i-3,..., 0, N-1, N-2, …, jusqu'à
trouver la donnée x ou une case vide.
d. Si on s’arrête avec une case vide, cela signifie que la
donnée n’existe pas.
MÉTHODES DE RÉSOLUTION DE COLLISIONS
28
1. Essai linéaire: Exercice 2 (Question 1.a)
MÉTHODES DE RÉSOLUTION DE COLLISIONS
Type Tcase = Structure
Donnée: TQQ
Vide: booléen initialisé à vrai
Fin
Var TH: Tableau [0 .. N-1] de Tcase
29
1. Essai linéaire: Exercice 2 (Question 1. b)
MÉTHODES DE RÉSOLUTION DE COLLISIONS
Procédure rechercher_TH_EL(TH: tableau de hachage, x: TQQ,
Var i:entier, Var trouve : booléen)
i H(x.clé) // calculer l’adresse primaire
TQ (TH[i].vide = faux) et (TH[i] .donnée≠ x) faire
DTQ
ii-1
Si i<0 alors i i+N
FTQ
Si (TH[i]. Vide = faux) et (TH[i].donnée = x) alors trouve vrai
Sinon trouve  faux
30
1. Essai linéaire:
 L’insertion d’une donnée x se déroule comme suit:
a. Calculer l’adresse primaire de x (soit i = h(x))
b. Si la case « i » de table de hachage est vide alors insérer x
dans cette case et la marquer comme non vide.
c. Sinon, parcourir les cases qui la précèdent : i-1, i-2, i-3,...,
0, N-1, N-2, …, jusqu'à trouver une case vide (soit « j »).
d. Insérer « x » dans la case « j » et la marquer comme non
vide.
MÉTHODES DE RÉSOLUTION DE COLLISIONS
31
1. Essai linéaire: Exercice 2 (Question 1. b)
MÉTHODES DE RÉSOLUTION DE COLLISIONS
Procédure insérer_TH_EL(Var TH: tableau de hachage, x: TQQ)
Debut
Si non TH_rempli (TH) alors // vérifier que le TH n’est pas rempli
i H(x.clé) // calculer l’adresse primaire
TQ (TH[i].vide = faux) faire
DTQ
ii-1
Si i<0 alors i i+N
FTQ
TH[i].donnée x
TH[i].vide faux
Fsi
Fin
Fonction TH_remplie( TH: tableau de hachage) : booléen
Cpt 0
Pour i 0 à N-1 faire
Si TH[i]. vide = vrai alors Cpt ++
Retourner (Cpt =1) // on sacrifie d’une case libre.
32
1. Essai linéaire:
 La suppression physique d'une donnée
x, génère une case vide
 Cette nouvelle case vide risque de
rendre d'autres données inaccessibles.
 Par exemple, si on supprime b en
vidant la case 1, on perd du même coup
la donnée f (h(f) = 2) car elle n'est plus
accessible.
 On doit alors faire des tests avant de
vider une case
MÉTHODES DE RÉSOLUTION DE COLLISIONS
Indice Vide
0 F e
1 V b
2 F d
3 F c
4 V
5 F a
6 V
7 F j
8 F g
9 F f
33
1. Essai linéaire:
 Le principe de la suppression d'une donnée x est donc :
a. Rechercher l'adresse i de x
b. Parcourir toutes les cases qui la précèdent : j = i-1, i-
2, i-3,..., 0, N-1, N-2, …, jusqu’à trouver une case
vide. Pour chaque case j, vérifier que sa donnée reste
accessible si la case i sera vidée.
c. Si toutes les cases j restent accessibles en vidant i,
alors on vide la case i et on s'arrête
MÉTHODES DE RÉSOLUTION DE COLLISIONS
34
1. Essai linéaire:
 Le principe de la suppression d'une donnée x est donc :
d. Sinon, déplacer la case j dans la case i et tenter de vider son
emplacement en testant les cases au dessus qui n'ont pas
encore été testées. C'est le même principe qu'on vient
d'appliquer pour la case i.
MÉTHODES DE RÉSOLUTION DE COLLISIONS
i
j
0
N-1
i
j
0
N-1
35
1. Essai linéaire:
 Par exemple, si on supprime b en vidant la case 1,
On va décaler la donnée f (h(f) = 2) à la case 1 et, la donnée j (h(j)
= 2) à la case 9.
MÉTHODES DE RÉSOLUTION DE COLLISIONS
Indice Vide
0 F e
1 F f
2 F d
3 F c
4 V
5 F a
6 V
7 V
8 F g
9 F j
Indice Vide
0 F e
1 V b
2 F d
3 F c
4 V
5 F a
6 V
7 F j
8 F g
9 F f
36
1. Essai linéaire: Exercice 2 (Question 1. b)
MÉTHODES DE RÉSOLUTION DE COLLISIONS
Procédure supprimer_TH_EL(Var TH: tableau de hachage, x: TQQ)
Rechercher (TH, x, i, trouve)
Si trouve = vrai alors
j  i-1
Si j<0 alors jj+N
TQ (T[j]. vide ≠ vrai)
DTQ
// calculer l’adresse primaire de la donnée j
k  H(TH[j].donnée.clé)
Si ((i>j) et (k ≥i ou k<j)) ou ((i<j) et (i≤k<j))
TH[i]T[ j];
ij
jj-1
Si j<0 alors jj+N
FTQ
T[i].vide vrai
i
j
0
N-1
i
j
0
Cas 2Cas 1
N-1
37
1. Essai linéaire:
 Un moyen simple consiste à faire une
suppression logique, c'est à dire le
positionnement d'un bit pour indiquer si la
donnée a été effacée ou pas.
 Chaque case renferme donc 2 bits :
 Vide indiquant une case vide
 Effacé indiquant un effacement logique
(la case n'est pas vide) exemple: b est
supprimée logiquement
MÉTHODES DE RÉSOLUTION DE COLLISIONS
Indice Vide Effacé donnée
0 F F e
1 F V b
2 F F d
3 F F c
4 V V
5 F F a
6 V V
7 F F j
8 F F g
9 F F f
38
1. Essai linéaire:
 Un moyen simple consiste à faire une
suppression logique, c'est à dire le
positionnement d'un bit qu'on rajoute au
niveau des entrées de la table.
 Pour récupérer l'espace perdu à cause des
effacements logiques, on effectue des
réorganisations périodiques. C.à.d.
réinsérer les données non effacées dans une
nouvelle table.
MÉTHODES DE RÉSOLUTION DE COLLISIONS
Indice Vide Effacé donnée
0 F F e
1 F V b
2 F F d
3 F F c
4 V V
5 F F a
6 V V
7 F F j
8 F F g
9 F F f
39
1. Essai linéaire:
 Un moyen simple consiste à faire une
suppression logique, c'est à dire le
positionnement d'un bit qu'on rajoute au
niveau des entrées de la table.
 Pour récupérer l'espace perdu à cause des
effacements logiques, on effectue des
réorganisations périodiques. C.à.d.
réinsérer les données non effacées dans une
nouvelle table.
MÉTHODES DE RÉSOLUTION DE COLLISIONS
Indice Vide Effacé donnée
0 F F e
1 F V b
2 F F d
3 F F c
4 V V
5 F F a
6 V V
7 F F j
8 F F g
9 F F f
40
1. Essai linéaire: Exercice 2 (Question 2. a)
 La recherche doit retourner vrai si (TH[i]. Effacé =
faux) et (TH[i].donné = x) au lieu (TH[i]. Vide = faux)
et (TH[i].donné = x)
MÉTHODES DE RÉSOLUTION DE COLLISIONS
Type Tcase = Structure
Donnée: TQQ
Vide: booléen initialisé à vrai
Effacé: booléen initialisé à vrai
Fin
Var TH: Tableau [0 .. N-1] de Tcase
41
1. Essai linéaire: Exercice 2 (Question 2. b)
 L’insertion peut se faire dans une case effacée
MÉTHODES DE RÉSOLUTION DE COLLISIONS
Procédure insérer_TH_EL(Var TH: tableau de hachage, x: TQQ)
Si non TH_rempli (TH) alors // vérifier que le TH n’est pas rempli
i H(x.clé) // calculer l’adresse primaire
TQ (TH[i].effacé = faux) faire
DTQ
ii-1
Si i<0 alors i i+N
FTQ
TH[i].donnée x
TH[i].vide faux
TH[i].effacéfaux
42
1. Essai linéaire: Exercice 2 (Question 2. b)
 La suppression consiste à positionner l’indicateur «
effacé » à vrai
MÉTHODES DE RÉSOLUTION DE COLLISIONS
Procédure supprimer_TH_EL(Var TH: tableau de hachage, x: TQQ)
Debut
Rechercher_TH_EL (TH, x, i, trouve)
Si trouve = vrai alors T[i].effacé vrai
Fin
43
1. Essai linéaire: Exercice 2 (Question 2. b)
 La réorganisation consiste à réinsérer les données non
effacées dans une nouvelle table.
MÉTHODES DE RÉSOLUTION DE COLLISIONS
Procédure réorganiser _TH(Var TH: Tableau de hachage)
Var Tmp: Tableau de Hachage; i: entier
Debut
Pour i0 à N-1 faire
Si (TH[i].effacé = faux) alors
Insérer_TH (Tmp, TH[i].donné)
//recopier le tableau Tmp dans TH
Pour i0 à N-1 faire
THi] Tmp[ [i]
Fin
44
2. Double Hachage :
 Cette méthode est presque analogue à la méthode d’essai
linéaire mais au lieu que la séquence soit linéaire, elle est
construite par une autre fonction de hachage soit h’.
 Soient h(x) la fonction utilisée pour le calcul de l'adresse
primaire et h'(x) la seconde fonction de hachage qui calcule
le pas de la séquence: h(x), h(x)-h'(x), h(x)-2h'(x), h(x)-
3h'(x), ...
 Pour que cette séquence soit circulaire, on rajoute N au
nouvel indice s’il est négatif.
MÉTHODES DE RÉSOLUTION DE COLLISIONS
45
2. Double Hachage : Exercice 1 (Question2):
MÉTHODES DE RÉSOLUTION DE COLLISIONS
Enregistrement
a b c d e f g j
h (x) 5 1 3 3 0 2 8 2
h‘(x) 2 4 1 3 3 1 5 2
Indice Vide donné
0 V
1 V
2 V
3 V
4 V
5 V
6 V
7 V
8 V
9 V
Après l’insertion
de a, b et c
Indice Vide donné
0 V
1 F b
2 V
3 F c
4 V
5 F a
6 V
7 V
8 V
9 V
46
2. Double Hachage : Exercice 1 (Question2):
MÉTHODES DE RÉSOLUTION DE COLLISIONS
Enregistrement
a b c d e f g j
h (x) 5 1 3 3 0 2 8 2
h‘(x) 2 4 1 3 3 1 5 2
Indice Vide donné
0 V
1 F b
2 V
3 F c
4 V
5 F a
6 V
7 V
8 V
9 V
↑ collision
Calcul de h(d) -h’(d) = 0  case vide
47
2. Double Hachage : Exercice 1 (Question2):
MÉTHODES DE RÉSOLUTION DE COLLISIONS
Enregistrement
a b c d e f g j
h (x) 5 1 3 3 0 2 8 2
h‘(x) 2 4 1 3 3 1 5 2
Indice Vide donné
0 F d
1 F b
2 V
3 F c
4 V
5 F a
6 V
7 V
8 V
9 V
↑ collision
Calcul de h(e) -h’(e) + 10 = 7  case vide
48
2. Double Hachage : Exercice 1 (Question2):
MÉTHODES DE RÉSOLUTION DE COLLISIONS
Enregistrement
a b c d e f g j
h (x) 5 1 3 3 0 2 8 2
h‘(x) 2 4 1 3 3 1 5 2
Indice Vide donné
0 F d
1 F b
2 V
3 F c
4 V
5 F a
6 V
7 F e
8 V
9 V
Après l’insertion
de f et g
Indice Vide donné
0 F d
1 F b
2 V f
3 F c
4 V
5 F a
6 V
7 F e
8 V g
9 V
49
2. Double Hachage : Exercice 1 (Question2):
MÉTHODES DE RÉSOLUTION DE COLLISIONS
Enregistrement
a b c d e f g j
h (x) 5 1 3 3 0 2 8 2
h‘(x) 2 4 1 3 3 1 5 2
Indice Vide donné
0 F d
1 F b
2 V f
3 F c
4 V
5 F a
6 V
7 F e
8 V g
9 V
↑ collision
Calcul de h(j) – h’(j) = 0  case pleine
Calcul de h(j) - 2 h’(j) + 10= 8  case pleine
Calcul de h(j) - 3 h’(j) + 10 = 6  case vide
50
2. Double Hachage : Exercice 1 (Question2):
MÉTHODES DE RÉSOLUTION DE COLLISIONS
Enregistrement
a b c d e f g j
h (x) 5 1 3 3 0 2 8 2
h‘(x) 2 4 1 3 3 1 5 2
Indice Vide donné
0 F d
1 F b
2 V f
3 F c
4 V
5 F a
6 F j
7 F e
8 V g
9 V
La recherche de « k » (tel que h(k) = 2 et h’(k) = 2)
s'arrête avec un échec dans la case vide d‘indice 4
la séquence de test est : 2, 0, 8, 6
 Si on devait insérer « k », la donnée serait
affectée à la case 4 (si c'est pas la dernière case
vide).
 La table est remplie quand le nombre d’éléments
insérés égale à N-1  sacrifice d’une case vide
51
2. Double Hachage : Exercice 1 (Question2):
MÉTHODES DE RÉSOLUTION DE COLLISIONS
Enregistrement
a b c d e f g j
h (x) 5 1 3 3 0 2 8 2
h‘(x) 2 4 1 3 3 1 5 2
Indice Vide donné
0 F d
1 F b
2 V f
3 F c
4 V
5 F a
6 F j
7 F e
8 V g
9 V
La recherche de « k » (tel que h(k) = 2 et h’(k) = 5)
génère une boucle infinie la séquence de test est :
2, 7, 2, 7, 2, 7, 2, 7, ….. On s’arrête après avoir
visité (N-1) cases.
Pour que la couverture soit totale (passer par
toutes les cases), il faut choisir la taille de la table
N un nombre premier
52
2. Double Hachage :
 Le principe de la recherche est analogue à celui
de l'essai linéaire.
a. Calculer l’adresse primaire de x (soit i = h(x))
b. Si la case « i » de table de hachage contient la donné x alors la
recherche est terminée.
c. Sinon rechercher la donnée x dans les cases qui la précèdent : j=
i-h'(x), i-2h'(x), i-3h'(x),…. [si j<0 alors j j+N] jusqu'à trouver
la donnée x ou une case vide ou visiter N-1 cases.
d. Si on s’arrête avec une case vide ou après avoir visité N-1 cases,
cela signifie que la donnée n’existe pas.
MÉTHODES DE RÉSOLUTION DE COLLISIONS
53
2. Double Hachage : Exercice 2 (Question 2. a)
MÉTHODES DE RÉSOLUTION DE COLLISIONS
Procédure rechercher_TH_DH(TH: tableau de hachage, x: TQQ,
Var i:entier, Var trouve : booléen)
i h(x.clé) // calculer l’adresse primaire
Cpt 0 // compter le nombre des cases visitées
TQ (TH[i].vide = faux) et (TH[i] . donnée≠ x) et (Cpt < N-1) faire
DTQ
ii-h’(x)
Si i<0 alors i i+N
Cpt ++;
FTQ
Si (TH[i]. Vide = faux) et (TH[i].donné = x) alors trouve vrai
Sinon trouve  faux
54
2. Double Hachage :
 L’insertion d’une donnée x se déroule comme suit:
a. Calculer l’adresse primaire de x (soit i = h(x))
b. Si la case « i » de table de hachage est vide alors insérer x
dans cette case et la marquer comme non vide.
c. Sinon, parcourir les cases qui la précèdent : j= i-h'(x), i-
2h'(x), i-3h'(x),…. [si j<0 alors j j+N], jusqu'à trouver
une case vide (soit « j ») ou visiter N-1 cases.
d. Si on trouve une case vide alors insérer « x » dans la case «
j » et la marquer comme non vide.
MÉTHODES DE RÉSOLUTION DE COLLISIONS
55
2. Double Hachage : Exercice 2 (Question 2. a)
MÉTHODES DE RÉSOLUTION DE COLLISIONS
Procédure insérer_TH_DH(Var TH: tableau de hachage, x: TQQ)
Debut
Si non TH_rempli (TH) alors // vérifier que le TH n’est pas rempli
i h(x.clé) // calculer l’adresse primaire
Cpt 0 // compter le nombre des cases visitées
TQ (TH[i].vide = faux) et (Cpt < N-1) faire
DTQ
ii-h’(x.clé)
Si i<0 alors i i+N
Cpt ++;
FTQ
Si (TH[i].vide = vrai) alors // on a trouvé une case vide
TH[i].donnée x
TH[i].vide faux
Fin
56
2. Double Hachage :
 Le principe de la suppression (logique et physique) est
analogue à la méthode d’essai de linéaire.
 La seule différence que dans la suppression physique, le
pas de la séquence est calculé par la seconde fonction de
hachage: j= i-h'(x), i-2h'(x), i-3h'(x),…. [si j<0 alors j j+N].
MÉTHODES DE RÉSOLUTION DE COLLISIONS
57
2. Double Hachage :
 Exemple d’une suppression physique: supprimer la donnée « c »
Cette suppression entraine le déplacement de la donnée « d » à la case
3 et la donnée « e » à la case 0
MÉTHODES DE RÉSOLUTION DE COLLISIONS
Indice Vide donné
0 F d
1 F b
2 V f
3 F c
4 V
5 F a
6 F j
7 F e
8 V g
9 V
Indice Vide donné
0 F e
1 F b
2 V f
3 F d
4 V
5 F a
6 F j
7 V
8 V g
9 V
58
2. Double Hachage : Exercice 2 (Question 2. a)
MÉTHODES DE RÉSOLUTION DE COLLISIONS
Procédure supprimer_TH_DH(Var TH: tableau de hachage, x: TQQ)
Rechercher (TH, x, i, trouve)
Si trouve = vrai alors
j  i-h’(x.donnée.clé)
Si j<0 alors jj+N
TQ (T[j]. vide ≠ vrai)
DTQ
// calculer l’adresse primaire de la donnée j
k  H(TH[j].donnée.clé)
Si ((i>j) et (k ≥i ou k<j)) ou ((i<j) et (i≤k<j))
TH[i]T[ j];
ij
jj-h’(x.donnée.clé)
Si j<0 alors jj+N
FTQ
T[i].vide vrai
i
j
0
N-1
i
j
0
Cas 2Cas 1
N-1
59
3. Chaînage séparé :
 Les données en débordement (en cas de collisions) sont stockés dans
un espace non «adressable» par la fonction de hachage. Par
exemple à l'extérieur de la table sous forme de Liste Linéaire
Chaînée (LLC).
MÉTHODES DE RÉSOLUTION DE COLLISIONS
Indice Vide donné lien
0 F e Null
1 F b Null
2 F f
3 F c
4 V Null
5 F a Null
6 V Null
7 V Null
8 F g Null
9 V Null
d Null
j k Null
h(f) = h(j) = h(k) = 2
h(c) = h(d) = 3
 Le champ « lien » lie les
données en cases primaires
avec leurs synonymes en
débordement.
 Le nombre de données
insérées peut dépasser la
taille de la table (N)
60
3. Chaînage séparé :
 La recherche d’une donnée x se déroule comme suit:
a. Calculer l’adresse primaire de x (soit i = h(x))
b. Si la case « i » de table de hachage contient la donné
x alors la recherche est terminée.
c. Sinon continuer la recherche séquentielle dans la
liste « lien »
MÉTHODES DE RÉSOLUTION DE COLLISIONS
61
3. Chaînage séparé : Exercice 2 (Question 1.a)
MÉTHODES DE RÉSOLUTION DE COLLISIONS
Type Maillon = Structure
Val: TQQ
Suiv: * Maillon initialisé à NULL
Fin
Type Tcase = Structure
Donnée: TQQ
Lien : *Maillon
Vide: booléen initialisé à vrai
Fin
Var TH: Tableau [0 .. N-1] de Tcase
62
3. Chaînage séparé : Exercice 2 (Question 1.b)
MÉTHODES DE RÉSOLUTION DE COLLISIONS
Procédure rechercher_TH_CS(TH: tableau de hachage, x: TQQ):
booléen
i H(x.clé) // calculer l’adresse primaire
Si TH[i].vide = faux alors
Si TH[i].donnée = x alors
retourner (vrai)
Sinon
Retourner (Rechercher_LLC(TH[i].lien, x))
Sinon
retourner (faux)
63
3. Chaînage séparé :
 L’insertion d’une donnée x se déroule comme suit:
a. Calculer l’adresse primaire de x (soit i = h(x))
b. Si la case « i » est vide alors insérer la donné dans
cette case.
c. Sinon insertion (au début) dans la liste associée à
cette case
MÉTHODES DE RÉSOLUTION DE COLLISIONS
64
3. Chaînage séparé : Exercice 2 (Question 1.b)
MÉTHODES DE RÉSOLUTION DE COLLISIONS
Procédure insérer_TH_CS(Var TH: tableau de hachage, x: TQQ)
i H(x.clé) // calculer l’adresse primaire
Si TH[i].vide = vrai alors
TH[i].donnée  x
TH[i].Vide faux
Sinon // insertion au debut de la liste
Insérer_Debut_LLC(TH[i].Lien, x)
FSI
65
3. Chaînage séparé :
 La suppression d’une donnée x se déroule comme suit:
a. Rechercher la donné x dans la table de hachage
b. Si x se trouve dans son adresse primaire (la donnée de la
case h(x)) alors
i. Si la liste « lien » n'est pas vide alors déplacer le
premier élément de la liste dans la case h(x) (en
écrasant x)
ii. Sinon vider la case h(x)
c. Sinon (x se trouve en débordement dans une liste) alors la
supprimer de cette liste
MÉTHODES DE RÉSOLUTION DE COLLISIONS
66
3. Chaînage séparé : Exercice 2 (Question 1.b)
MÉTHODES DE RÉSOLUTION DE COLLISIONS
Procédure supprimer _TH_CS(Var TH: tableau de hachage, x: TQQ)
Trouve Rechercher_TH_CS (TH, x);
ih(x.clé)
Si (trouve = vrai) alors
Si TH[i].donné= x alors
Si TH[i].Lien = Null alors
TH[i].Vide vrai
Sinon
PTH[i].Lien
TH[i].donnée  Valeur(P)
TH[i].Lien suivant (P)
Libérer (P)
Sinon // supprimer x de la liste
Supprimer_LLC(TH[i].Lien, x)
FSI
67
4. Chaînage interne :
 Les données en débordement (en cas de collisions) sont stockés dans
la table (dans le même espace « adressable » par la fonction) en
gardant le chaînage entre les synonymes
MÉTHODES DE RÉSOLUTION DE COLLISIONS
Indice Vide donné lien
0 F e -1
1 F b -1
2 F f 6
3 F c 4
4 F d -1
5 F a -1
6 V j 7
7 V k -1
8 F g -1
9 V -1
 Le champ « lien » lie les données en cases
primaires avec leurs synonymes en
débordement.
 La table est remplie quand le nombre
d’éléments insérés égale à N-1  sacrifice
d’une case vide
68
4. Chaînage interne :
 Comme dans le chaînage séparée, la recherche d’une
donnée x se déroule comme suit:
a. Calculer l’adresse primaire de x (soit i = h(x))
b. Si la case « i » de table de hachage contient la donné
x alors la recherche est terminée.
c. Sinon continuer la recherche séquentielle dans la
liste « lien »
MÉTHODES DE RÉSOLUTION DE COLLISIONS
69
4. Chaînage interne :
 Comme dans le chaînage séparée, la recherche d’une
donnée x se déroule comme suit:
a. Calculer l’adresse primaire de x (soit i = h(x))
b. Si la case « i » de table de hachage contient la donné
x alors la recherche est terminée.
c. Sinon continuer la recherche séquentielle dans la
liste « lien »
MÉTHODES DE RÉSOLUTION DE COLLISIONS
70
4. Chaînage interne :
 L’insertion d’une donnée x se déroule comme suit:
a. Calculer l’adresse primaire de x (soit i = h(x))
b. Si la case « i » est vide alors insérer la donné dans
cette case.
c. Sinon trouver une case vide, insérer la donnée dans
cette case ensuite la chaine à la queue de liste de « i
».
MÉTHODES DE RÉSOLUTION DE COLLISIONS
71
4. Chaînage interne :
 La suppression d’une donnée x se déroule comme suit:
a. Rechercher l’adresse i de la donné, ainsi que son
prédécesseur k dans la liste.
b. Rechercher le successeur de i (soit j) où h(j) = i [son
adresse primaire égale à i]
c. Si un tel successeur existe alors on le déplace vers i et on
tente de vider son emplacement (ij)
d. Sinon (il n'y a pas de problèmes avec les successeurs), on
vide la case i en mettant à jour son prédécesseur j pour
qu’il pointe le successeur immédiat de i
MÉTHODES DE RÉSOLUTION DE COLLISIONS
72
4. Chaînage interne :
 Les difficultés rencontrés dans cette méthode peuvent se
résumer en deux points:
 Insertion: rechercher la queue de la liste « i »
 Suppression: garder le prédécesseur de « i » qui
n’existe pas toujours (la première case n’a pas de
prédécesseur)
 La solution est d’utiliser une liste circulaire où la
première case pointe la dernière case.
MÉTHODES DE RÉSOLUTION DE COLLISIONS
73
4. Chaînage interne :
 Si le champs « lien » égale à -1 cela indique que la liste est vide.
 Sinon il indique l’indice de la case suivante
MÉTHODES DE RÉSOLUTION DE COLLISIONS
Indice Vide donné lien
0 F e -1
1 F b -1
2 F f 6
3 F c 4
4 F d 3
5 F a -1
6 V j 7
7 V k 2
8 F g -1
9 V -1
Indice Vide donné lien
0 F e -1
1 F b -1
2 F f 6
3 F c 4
4 F d -1
5 F a -1
6 V j 7
7 V k -1
8 F g -1
9 V -1
74
4. Chaînage interne : Exercice 2 (Question 1.a)
MÉTHODES DE RÉSOLUTION DE COLLISIONS
Type Tcase = Structure
Donnée: TQQ
Lien : entier initialisé à -1
Vide: booléen initialisé à vrai
Fin
Var TH: Tableau [0 .. N-1] de Tcase
75
4. Chaînage interne : Exercice 2 (Question 1.b)
MÉTHODES DE RÉSOLUTION DE COLLISIONS
Procédure rechercher_TH_CI(TH: tableau de hachage, x: TQQ):
booléen
i H(x.clé) // calculer l’adresse primaire
Si TH[i].vide = faux alors
Si TH[i].donnée = x alors
retourner (vrai)
Sinon
jTH[i].lien
TQ (j≠ -1) et (j ≠ i ) faire
Si TH[j].donnée = x alors retourner (vrai)
Sinon j  TH[i].lien
Sinon
retourner (faux)
76
3. Chaînage séparé : Exercice 2 (Question 1.b)
MÉTHODES DE RÉSOLUTION DE COLLISIONS
Procédure insérer_TH_CS(Var TH: tableau de hachage, x: TQQ)
i H(x.clé) // calculer l’adresse primaire
Si TH[i].vide = vrai alors
TH[i].donnée  x
TH[i].Vide faux
Sinon // insertion au debut de la liste
k  trouver_case_vide(TH)
Si (k ≠ -1) alors
TH[k].donnée  x
TH[k].Vide faux
Si TH[i].lien = -1 alors
TH[k].lien  i ;
Sinon
TH[k].lien TH[i].lien;
TH[i].lien k
FSI
77
4. Chaînage interne :
 La suppression d’une donnée x se déroule comme suit:
a. Rechercher l’adresse i de la donné, ainsi que son
prédécesseur k dans la liste.
b. Rechercher le successeur de i (soit j) où h(j) = i [son
adresse primaire égale à i]
c. Si un tel successeur existe alors on le déplace vers i et on
tente de vider son emplacement (ij)
d. Sinon (il n'y a pas de problèmes avec les successeurs), on
vide la case i en mettant à jour son prédécesseur j pour
qu’il pointe le successeur immédiat de i
MÉTHODES DE RÉSOLUTION DE COLLISIONS
78
4. Chaînage interne : Exercice 2 (Question 1.b)
MÉTHODES DE RÉSOLUTION DE COLLISIONS
Procédure supprimer _TH_CS(Var TH: tableau de hachage, x: TQQ)
Trouve Rechercher_TH_CS (TH, x);
ih(x.clé)
Si (trouve = vrai) alors
Si TH[i].Lien = -1 alors // cela implique TH[i].donné= x
TH[i].Vide vrai
Sinon // rechercher le prédécesseur k et le premier successeur j tel que h(j) = i
Répéter
lTH[i].Lien
existe  faux
TQ (l≠ i) faire
Si ((h(TH[l].donné.clé) = i) et (non existe) alors
jl; existe vrai
k  l; l  TH[l].lien
FTQ
Si existe alors
TH [i] TH[j]; ij
Sinon ……
79
4. Chaînage interne : Exercice 2 (Question 1.b)
MÉTHODES DE RÉSOLUTION DE COLLISIONS
Sinon // rechercher le prédécesseur k et le premier successeur j tel que h(j) = i
Répéter
lTH[i].Lien
existe  faux
TQ (l≠ i) faire
Si ((h(TH[l].donné.clé) = i) et (non existe) alors
jl; existe vrai
k  l; l  TH[l].lien
FTQ
Si existe alors
TH [i] TH[j]; ij
Sinon
TH[i].vide vrai
Si TH[i].lien = k alors TH[k].lien -1
Sinon TH[k].lien TH[i].lien
Jusqu’à non existe
FSI
80
 La figure suivante résume les courbes des nombres moyens de tests
pour une recherche par rapport au chargement de la table (M/N, M
étant le nombre des éléments présents dans la table) pour les
quatre méthodes présentées.
MÉTHODES DE RÉSOLUTION DE COLLISIONS
L : essai linéaire
D : double hachage
C : chaînage interne
S : chaînage séparé
81
 Comme la figure le montre, les méthodes de chaînage semblent les
meilleures. Cependant, leur inconvénient réside dans le champ
additionnel représentant les liens.
MÉTHODES DE RÉSOLUTION DE COLLISIONS
L : essai linéaire
D : double hachage
C : chaînage interne
S : chaînage séparé
82
 Pour l'essai linéaire par exemple, même quand la table est remplie
à 90%, le nombre de tests est au voisinage de 5.
 Pour avoir un temps rapide (de l'ordre de 1), on convient de ne pas
dépasser un chargement de 70%.
MÉTHODES DE RÉSOLUTION DE COLLISIONS
L : essai linéaire
D : double hachage
C : chaînage interne
S : chaînage séparé
83
 Soit une table de N cases, et on aimerait insérer r
données. Le pourcentage de remplissage (la densité) est
donc: d = r / N
 Soit P(x) la probabilité que x données parmi r soient «
hachées » vers la même case
 La fonction de Poisson en est une bonne approximation,
en supposant une fonction de hachage uniforme
ESTIMATION DES DÉBORDEMENTS
84
 La fonction de Poisson en est une bonne approximation,
en supposant une fonction de hachage uniforme
 N*P(x) est donc une estimation du nombre de cases
ayant été choisies x fois durant l'insertion des r données
dans la table
 Le nombre total de données en débordement est alors
estimé à :
ESTIMATION DES DÉBORDEMENTS
85
 Exemple numérique:
 Lors de l'insertion de 1000 données dans une table de
1000 cases (densité = 1), on estime que :
 N.P(0) = 368 cases ne recevront aucune données
 N.P(1) = 368 cases auront été choisies 1 seule fois
 N.P(2) = 184 cases auront été choisies 2 fois
 N.P(3) = 61 cases auront été choisies 3 fois
 N.P(4) = 15 cases auront été choisies 4 fois
 N.P(5) = 3 cases auront été choisies 5 fois
 N.P(6) = 0 cases auront été choisies 6 fois
ESTIMATION DES DÉBORDEMENTS
86
 Exemple numérique:
 Le nombre de données en débordement est proche de :
184 + 2*61 + 3*15 + 4*3 = 363 soit 36% des données
contre 631 (368 + 184 + 61 + 15 + 3) données dans leurs
adresses primaires
 Pour une densité = 0.5, (ex r = 500 et N = 1000), on
aurait eu 21% de données en débordement et 79% de
données rangées dans leur adresse primaire.
ESTIMATION DES DÉBORDEMENTS
87
 Les méthodes de hachage donnent des résultats excellents en
moyenne O(1), mais lamentables dans le pire cas O(n), car il
n'est pas possible d'éviter les collisions.
 En particulier, le choix de la fonction de hachage est
fondamental.
 Il existe plusieurs façons de réduire les collisions :
 trouver une fonction de hachage qui distribue bien les données
c'est a dire de façon aléatoire.
 augmenter l'espace des adresses possibles.
 mettre plus d'une donnée par adresse possible (si on accepte
par exemple b données par adresse donc d = r/(b*N).
CONCLUSION
SOURCES DE CE COURS
 N. EL-ALLIA , Cours d’Algorithmique et Structures de données dynamiques, Ecole
nationale Supérieure d’Informatique (ESI), 2014.
 Djamel Eddine ZEGOUR, Cours de Structures de Données, Ecole nationale
Supérieure d’Informatique (ESI), Disponible sur
http://zegour.esi.dz/Cours/Cours_sdd.htm
 W. K. Hidouci, Cours Structures De Données et Fichiers, École nationale Supérieure
d’Informatique, Disponible sur hidouci.esi.dz/algo/
88

Weitere ähnliche Inhalte

Was ist angesagt?

Devoirs Algorithme + correction pour 4 si
Devoirs Algorithme + correction pour 4 siDevoirs Algorithme + correction pour 4 si
Devoirs Algorithme + correction pour 4 siNarûtö Bàl'Sèm
 
BigData_TP2: Design Patterns dans Hadoop
BigData_TP2: Design Patterns dans HadoopBigData_TP2: Design Patterns dans Hadoop
BigData_TP2: Design Patterns dans HadoopLilia Sfaxi
 
Cours les Listes doublement chainées Prof. KHALIFA MANSOURI
Cours les Listes doublement chainées Prof. KHALIFA MANSOURI Cours les Listes doublement chainées Prof. KHALIFA MANSOURI
Cours les Listes doublement chainées Prof. KHALIFA MANSOURI Mansouri Khalifa
 
Chapitre 2 complexité
Chapitre 2 complexitéChapitre 2 complexité
Chapitre 2 complexitéSana Aroussi
 
Systèmes d'Exploitation - chp5-gestion fichiers
Systèmes d'Exploitation - chp5-gestion fichiersSystèmes d'Exploitation - chp5-gestion fichiers
Systèmes d'Exploitation - chp5-gestion fichiersLilia Sfaxi
 
Les règles de passage
Les règles de passageLes règles de passage
Les règles de passagemarwa baich
 
Chapitre ii complexité et optimalité
Chapitre ii complexité et optimalitéChapitre ii complexité et optimalité
Chapitre ii complexité et optimalitéSana Aroussi
 
Exercices uml-corrige
Exercices uml-corrigeExercices uml-corrige
Exercices uml-corrigeAmineMouhout1
 
Corrigé qcm initiation informatique sgbd - réseau - internet - architectu...
Corrigé qcm   initiation informatique   sgbd - réseau - internet - architectu...Corrigé qcm   initiation informatique   sgbd - réseau - internet - architectu...
Corrigé qcm initiation informatique sgbd - réseau - internet - architectu...Sofien Zarrouki
 
BigData_TP4 : Cassandra
BigData_TP4 : CassandraBigData_TP4 : Cassandra
BigData_TP4 : CassandraLilia Sfaxi
 
Chapitre iii récursivité et paradigme diviser pour régner
Chapitre iii récursivité et paradigme diviser pour régnerChapitre iii récursivité et paradigme diviser pour régner
Chapitre iii récursivité et paradigme diviser pour régnerSana Aroussi
 
Chapitre v algorithmes gloutons
Chapitre v algorithmes gloutonsChapitre v algorithmes gloutons
Chapitre v algorithmes gloutonsSana Aroussi
 
Le microprocesseur
Le microprocesseurLe microprocesseur
Le microprocesseurISIG
 
Base des systèmes à microprocesseur
Base des systèmes à microprocesseurBase des systèmes à microprocesseur
Base des systèmes à microprocesseurPeronnin Eric
 
Programme d’informatique pour la 2ème année secondaire au
Programme d’informatique pour la 2ème année secondaire auProgramme d’informatique pour la 2ème année secondaire au
Programme d’informatique pour la 2ème année secondaire auHanfi Akram
 
Methodes d'accès dans les réseaux locaux
Methodes d'accès dans les réseaux locauxMethodes d'accès dans les réseaux locaux
Methodes d'accès dans les réseaux locauxInes Kechiche
 
Chapitre i introduction et motivations
Chapitre i introduction et motivationsChapitre i introduction et motivations
Chapitre i introduction et motivationsSana Aroussi
 

Was ist angesagt? (20)

Chapitre 3 spark
Chapitre 3 sparkChapitre 3 spark
Chapitre 3 spark
 
Devoirs Algorithme + correction pour 4 si
Devoirs Algorithme + correction pour 4 siDevoirs Algorithme + correction pour 4 si
Devoirs Algorithme + correction pour 4 si
 
BigData_TP2: Design Patterns dans Hadoop
BigData_TP2: Design Patterns dans HadoopBigData_TP2: Design Patterns dans Hadoop
BigData_TP2: Design Patterns dans Hadoop
 
Cours les Listes doublement chainées Prof. KHALIFA MANSOURI
Cours les Listes doublement chainées Prof. KHALIFA MANSOURI Cours les Listes doublement chainées Prof. KHALIFA MANSOURI
Cours les Listes doublement chainées Prof. KHALIFA MANSOURI
 
Récursivité
RécursivitéRécursivité
Récursivité
 
Chapitre 2 complexité
Chapitre 2 complexitéChapitre 2 complexité
Chapitre 2 complexité
 
Systèmes d'Exploitation - chp5-gestion fichiers
Systèmes d'Exploitation - chp5-gestion fichiersSystèmes d'Exploitation - chp5-gestion fichiers
Systèmes d'Exploitation - chp5-gestion fichiers
 
Les règles de passage
Les règles de passageLes règles de passage
Les règles de passage
 
Chapitre ii complexité et optimalité
Chapitre ii complexité et optimalitéChapitre ii complexité et optimalité
Chapitre ii complexité et optimalité
 
Exercices uml-corrige
Exercices uml-corrigeExercices uml-corrige
Exercices uml-corrige
 
Corrigé qcm initiation informatique sgbd - réseau - internet - architectu...
Corrigé qcm   initiation informatique   sgbd - réseau - internet - architectu...Corrigé qcm   initiation informatique   sgbd - réseau - internet - architectu...
Corrigé qcm initiation informatique sgbd - réseau - internet - architectu...
 
BigData_TP4 : Cassandra
BigData_TP4 : CassandraBigData_TP4 : Cassandra
BigData_TP4 : Cassandra
 
Tp n 1 linux
Tp n 1 linuxTp n 1 linux
Tp n 1 linux
 
Chapitre iii récursivité et paradigme diviser pour régner
Chapitre iii récursivité et paradigme diviser pour régnerChapitre iii récursivité et paradigme diviser pour régner
Chapitre iii récursivité et paradigme diviser pour régner
 
Chapitre v algorithmes gloutons
Chapitre v algorithmes gloutonsChapitre v algorithmes gloutons
Chapitre v algorithmes gloutons
 
Le microprocesseur
Le microprocesseurLe microprocesseur
Le microprocesseur
 
Base des systèmes à microprocesseur
Base des systèmes à microprocesseurBase des systèmes à microprocesseur
Base des systèmes à microprocesseur
 
Programme d’informatique pour la 2ème année secondaire au
Programme d’informatique pour la 2ème année secondaire auProgramme d’informatique pour la 2ème année secondaire au
Programme d’informatique pour la 2ème année secondaire au
 
Methodes d'accès dans les réseaux locaux
Methodes d'accès dans les réseaux locauxMethodes d'accès dans les réseaux locaux
Methodes d'accès dans les réseaux locaux
 
Chapitre i introduction et motivations
Chapitre i introduction et motivationsChapitre i introduction et motivations
Chapitre i introduction et motivations
 

Andere mochten auch

Chapitre 2 problème de plus court chemin
Chapitre 2 problème de plus court cheminChapitre 2 problème de plus court chemin
Chapitre 2 problème de plus court cheminSana Aroussi
 
Chapitre i rappel sur l'algèbre de boole
Chapitre i rappel sur l'algèbre de boole Chapitre i rappel sur l'algèbre de boole
Chapitre i rappel sur l'algèbre de boole Sana Aroussi
 
Chapitre iv algorithmes de tri
Chapitre iv algorithmes de triChapitre iv algorithmes de tri
Chapitre iv algorithmes de triSana Aroussi
 
Chapitre 3 structures séquentielles
Chapitre 3 structures séquentiellesChapitre 3 structures séquentielles
Chapitre 3 structures séquentiellesSana Aroussi
 
Chapitre 5 structures hierarchiques (arbres)
Chapitre 5 structures hierarchiques (arbres)Chapitre 5 structures hierarchiques (arbres)
Chapitre 5 structures hierarchiques (arbres)Sana Aroussi
 
Chapitre 1 arbres de recherche
Chapitre 1 arbres de rechercheChapitre 1 arbres de recherche
Chapitre 1 arbres de rechercheSana Aroussi
 
La complexité des algorithmes récursives Géométrie algorithmique
La complexité des algorithmes récursivesGéométrie algorithmiqueLa complexité des algorithmes récursivesGéométrie algorithmique
La complexité des algorithmes récursives Géométrie algorithmiqueHajer Trabelsi
 
Le problème de voyageur de commerce: algorithme génétique
Le problème de voyageur de commerce: algorithme génétiqueLe problème de voyageur de commerce: algorithme génétique
Le problème de voyageur de commerce: algorithme génétiqueRima Lassoued
 
Chapitre 4 heuristiques et méta heuristiques
Chapitre 4 heuristiques et méta heuristiquesChapitre 4 heuristiques et méta heuristiques
Chapitre 4 heuristiques et méta heuristiquesSana Aroussi
 
Technique de Cryptographie AES, DES et RSA
Technique de Cryptographie AES, DES et RSATechnique de Cryptographie AES, DES et RSA
Technique de Cryptographie AES, DES et RSAHouda Elmoutaoukil
 
Cours structures des données (langage c)
Cours structures des données (langage c)Cours structures des données (langage c)
Cours structures des données (langage c)rezgui mohamed
 
Reconnaissance faciale
Reconnaissance facialeReconnaissance faciale
Reconnaissance facialeAymen Fodda
 
listes chainée en JAVA
listes chainée en JAVAlistes chainée en JAVA
listes chainée en JAVAsunsaida
 
Rapport sécurité
Rapport sécuritéRapport sécurité
Rapport sécuritédihiaselma
 
Big data f prez formation_datascience_14-sept
Big data f prez formation_datascience_14-septBig data f prez formation_datascience_14-sept
Big data f prez formation_datascience_14-septKezhan SHI
 
Ce que vous pouvez faire à la bibliotheque Vaclav Havel au mois de septembre ...
Ce que vous pouvez faire à la bibliotheque Vaclav Havel au mois de septembre ...Ce que vous pouvez faire à la bibliotheque Vaclav Havel au mois de septembre ...
Ce que vous pouvez faire à la bibliotheque Vaclav Havel au mois de septembre ...Bib Havel
 

Andere mochten auch (20)

Chapitre 2 problème de plus court chemin
Chapitre 2 problème de plus court cheminChapitre 2 problème de plus court chemin
Chapitre 2 problème de plus court chemin
 
Chapitre i rappel sur l'algèbre de boole
Chapitre i rappel sur l'algèbre de boole Chapitre i rappel sur l'algèbre de boole
Chapitre i rappel sur l'algèbre de boole
 
Chapitre iv algorithmes de tri
Chapitre iv algorithmes de triChapitre iv algorithmes de tri
Chapitre iv algorithmes de tri
 
Chapitre 3 structures séquentielles
Chapitre 3 structures séquentiellesChapitre 3 structures séquentielles
Chapitre 3 structures séquentielles
 
Chapitre 5 structures hierarchiques (arbres)
Chapitre 5 structures hierarchiques (arbres)Chapitre 5 structures hierarchiques (arbres)
Chapitre 5 structures hierarchiques (arbres)
 
Chapitre 1 rappel
Chapitre 1   rappelChapitre 1   rappel
Chapitre 1 rappel
 
Chapitre 1 arbres de recherche
Chapitre 1 arbres de rechercheChapitre 1 arbres de recherche
Chapitre 1 arbres de recherche
 
La complexité des algorithmes récursives Géométrie algorithmique
La complexité des algorithmes récursivesGéométrie algorithmiqueLa complexité des algorithmes récursivesGéométrie algorithmique
La complexité des algorithmes récursives Géométrie algorithmique
 
Le problème de voyageur de commerce: algorithme génétique
Le problème de voyageur de commerce: algorithme génétiqueLe problème de voyageur de commerce: algorithme génétique
Le problème de voyageur de commerce: algorithme génétique
 
Chapitre 4 heuristiques et méta heuristiques
Chapitre 4 heuristiques et méta heuristiquesChapitre 4 heuristiques et méta heuristiques
Chapitre 4 heuristiques et méta heuristiques
 
Technique de Cryptographie AES, DES et RSA
Technique de Cryptographie AES, DES et RSATechnique de Cryptographie AES, DES et RSA
Technique de Cryptographie AES, DES et RSA
 
Cours structures des données (langage c)
Cours structures des données (langage c)Cours structures des données (langage c)
Cours structures des données (langage c)
 
Secure hashing algorithm
Secure hashing algorithmSecure hashing algorithm
Secure hashing algorithm
 
Secure Hash Algorithm
Secure Hash AlgorithmSecure Hash Algorithm
Secure Hash Algorithm
 
Reconnaissance faciale
Reconnaissance facialeReconnaissance faciale
Reconnaissance faciale
 
listes chainée en JAVA
listes chainée en JAVAlistes chainée en JAVA
listes chainée en JAVA
 
Rapport sécurité
Rapport sécuritéRapport sécurité
Rapport sécurité
 
Big data f prez formation_datascience_14-sept
Big data f prez formation_datascience_14-septBig data f prez formation_datascience_14-sept
Big data f prez formation_datascience_14-sept
 
Ce que vous pouvez faire à la bibliotheque Vaclav Havel au mois de septembre ...
Ce que vous pouvez faire à la bibliotheque Vaclav Havel au mois de septembre ...Ce que vous pouvez faire à la bibliotheque Vaclav Havel au mois de septembre ...
Ce que vous pouvez faire à la bibliotheque Vaclav Havel au mois de septembre ...
 
Hardware y Software
Hardware y SoftwareHardware y Software
Hardware y Software
 

Ähnlich wie Chapitre 6 hachage statique

Cours programmation en matlab2 (1)
Cours programmation en matlab2 (1)Cours programmation en matlab2 (1)
Cours programmation en matlab2 (1)Guesmi Amal
 
Algorithmique seconde (corrigés et commentaires)
Algorithmique seconde (corrigés et commentaires)Algorithmique seconde (corrigés et commentaires)
Algorithmique seconde (corrigés et commentaires)DriNox NordisTe
 
M1_exercices_corriges.pdf
M1_exercices_corriges.pdfM1_exercices_corriges.pdf
M1_exercices_corriges.pdfDurelDonfack
 
Chaitre 3 Fonctions logiques (1).pptx
Chaitre 3 Fonctions logiques (1).pptxChaitre 3 Fonctions logiques (1).pptx
Chaitre 3 Fonctions logiques (1).pptxMohammedJaafari3
 
Omp math nombres-complexes
Omp math nombres-complexesOmp math nombres-complexes
Omp math nombres-complexesAhmed Ali
 
Traitement des données massives (INF442, A4)
Traitement des données massives (INF442, A4)Traitement des données massives (INF442, A4)
Traitement des données massives (INF442, A4)Frank Nielsen
 
Devoir Math Bac 2011_La Correction
Devoir Math Bac 2011_La CorrectionDevoir Math Bac 2011_La Correction
Devoir Math Bac 2011_La CorrectionAchraf Frouja
 
Ex determ
Ex determEx determ
Ex determbades12
 
LES ALGORITHMES D’APPROXIMATION
LES ALGORITHMES D’APPROXIMATIONLES ALGORITHMES D’APPROXIMATION
LES ALGORITHMES D’APPROXIMATIONborhen boukthir
 
Corrige math s1-s3_r_1er_gr_2013
Corrige math s1-s3_r_1er_gr_2013Corrige math s1-s3_r_1er_gr_2013
Corrige math s1-s3_r_1er_gr_2013Ibrahima Sow
 
Corrigées TD 9 de Module Analyse 3 pour les étudiants de la filière Mathémati...
Corrigées TD 9 de Module Analyse 3 pour les étudiants de la filière Mathémati...Corrigées TD 9 de Module Analyse 3 pour les étudiants de la filière Mathémati...
Corrigées TD 9 de Module Analyse 3 pour les étudiants de la filière Mathémati...AbdoFreedom
 
Projet d'Analyse Numérique
Projet d'Analyse NumériqueProjet d'Analyse Numérique
Projet d'Analyse NumériqueYassineElaroui2
 

Ähnlich wie Chapitre 6 hachage statique (20)

coursAlgo_V5.pdf
coursAlgo_V5.pdfcoursAlgo_V5.pdf
coursAlgo_V5.pdf
 
Cours programmation en matlab2 (1)
Cours programmation en matlab2 (1)Cours programmation en matlab2 (1)
Cours programmation en matlab2 (1)
 
Muscu4
Muscu4Muscu4
Muscu4
 
Algorithmique seconde (corrigés et commentaires)
Algorithmique seconde (corrigés et commentaires)Algorithmique seconde (corrigés et commentaires)
Algorithmique seconde (corrigés et commentaires)
 
M1_exercices_corriges.pdf
M1_exercices_corriges.pdfM1_exercices_corriges.pdf
M1_exercices_corriges.pdf
 
Chaitre 3 Fonctions logiques (1).pptx
Chaitre 3 Fonctions logiques (1).pptxChaitre 3 Fonctions logiques (1).pptx
Chaitre 3 Fonctions logiques (1).pptx
 
Fonct ration
Fonct rationFonct ration
Fonct ration
 
02 correction-td smi-s3-algo2
02 correction-td smi-s3-algo202 correction-td smi-s3-algo2
02 correction-td smi-s3-algo2
 
Omp math nombres-complexes
Omp math nombres-complexesOmp math nombres-complexes
Omp math nombres-complexes
 
Traitement des données massives (INF442, A4)
Traitement des données massives (INF442, A4)Traitement des données massives (INF442, A4)
Traitement des données massives (INF442, A4)
 
Devoir Math Bac 2011_La Correction
Devoir Math Bac 2011_La CorrectionDevoir Math Bac 2011_La Correction
Devoir Math Bac 2011_La Correction
 
Ex determ
Ex determEx determ
Ex determ
 
LES ALGORITHMES D’APPROXIMATION
LES ALGORITHMES D’APPROXIMATIONLES ALGORITHMES D’APPROXIMATION
LES ALGORITHMES D’APPROXIMATION
 
Exercice intégrales
Exercice intégralesExercice intégrales
Exercice intégrales
 
Corrige math s1-s3_r_1er_gr_2013
Corrige math s1-s3_r_1er_gr_2013Corrige math s1-s3_r_1er_gr_2013
Corrige math s1-s3_r_1er_gr_2013
 
Corrigées TD 9 de Module Analyse 3 pour les étudiants de la filière Mathémati...
Corrigées TD 9 de Module Analyse 3 pour les étudiants de la filière Mathémati...Corrigées TD 9 de Module Analyse 3 pour les étudiants de la filière Mathémati...
Corrigées TD 9 de Module Analyse 3 pour les étudiants de la filière Mathémati...
 
Projet d'Analyse Numérique
Projet d'Analyse NumériqueProjet d'Analyse Numérique
Projet d'Analyse Numérique
 
cours algorithme
cours algorithmecours algorithme
cours algorithme
 
Video
VideoVideo
Video
 
coursAlgo_V6.ppt
coursAlgo_V6.pptcoursAlgo_V6.ppt
coursAlgo_V6.ppt
 

Mehr von Sana Aroussi

Gestion des threads
Gestion des threadsGestion des threads
Gestion des threadsSana Aroussi
 
Chapitre 2 plus court chemin
Chapitre 2 plus court cheminChapitre 2 plus court chemin
Chapitre 2 plus court cheminSana Aroussi
 
Chapitre 1 arbres de recherche
Chapitre 1 arbres de rechercheChapitre 1 arbres de recherche
Chapitre 1 arbres de rechercheSana Aroussi
 
Chapitre 4 récursivité
Chapitre 4 récursivitéChapitre 4 récursivité
Chapitre 4 récursivitéSana Aroussi
 
Chapitre 5 arbres binaires
Chapitre 5 arbres binairesChapitre 5 arbres binaires
Chapitre 5 arbres binairesSana Aroussi
 
Chapitre iii interruptions
Chapitre iii interruptionsChapitre iii interruptions
Chapitre iii interruptionsSana Aroussi
 
Chapitre ii mémoires
Chapitre ii mémoiresChapitre ii mémoires
Chapitre ii mémoiresSana Aroussi
 
Chapitre i architectures des processeurs récents
Chapitre i architectures des processeurs récentsChapitre i architectures des processeurs récents
Chapitre i architectures des processeurs récentsSana Aroussi
 
Chapitre vi np complétude
Chapitre vi np complétudeChapitre vi np complétude
Chapitre vi np complétudeSana Aroussi
 
Chapitre iii processeur intel 80x86
Chapitre iii processeur intel 80x86Chapitre iii processeur intel 80x86
Chapitre iii processeur intel 80x86Sana Aroussi
 
Chapitre ii architecture interne des processeurs
Chapitre ii architecture interne des processeursChapitre ii architecture interne des processeurs
Chapitre ii architecture interne des processeursSana Aroussi
 
Chapitre i architecture générale de l’unité centrale d’un ordinateur
Chapitre i architecture générale de l’unité centrale d’un ordinateurChapitre i architecture générale de l’unité centrale d’un ordinateur
Chapitre i architecture générale de l’unité centrale d’un ordinateurSana Aroussi
 
Chapitre iii circuits séquentiels
Chapitre iii circuits séquentielsChapitre iii circuits séquentiels
Chapitre iii circuits séquentielsSana Aroussi
 

Mehr von Sana Aroussi (15)

Chapitre 1 rappel
Chapitre 1 rappelChapitre 1 rappel
Chapitre 1 rappel
 
Gestion des threads
Gestion des threadsGestion des threads
Gestion des threads
 
Chapitre 2 plus court chemin
Chapitre 2 plus court cheminChapitre 2 plus court chemin
Chapitre 2 plus court chemin
 
Chapitre 1 arbres de recherche
Chapitre 1 arbres de rechercheChapitre 1 arbres de recherche
Chapitre 1 arbres de recherche
 
Chapitre 1 rappel
Chapitre 1 rappelChapitre 1 rappel
Chapitre 1 rappel
 
Chapitre 4 récursivité
Chapitre 4 récursivitéChapitre 4 récursivité
Chapitre 4 récursivité
 
Chapitre 5 arbres binaires
Chapitre 5 arbres binairesChapitre 5 arbres binaires
Chapitre 5 arbres binaires
 
Chapitre iii interruptions
Chapitre iii interruptionsChapitre iii interruptions
Chapitre iii interruptions
 
Chapitre ii mémoires
Chapitre ii mémoiresChapitre ii mémoires
Chapitre ii mémoires
 
Chapitre i architectures des processeurs récents
Chapitre i architectures des processeurs récentsChapitre i architectures des processeurs récents
Chapitre i architectures des processeurs récents
 
Chapitre vi np complétude
Chapitre vi np complétudeChapitre vi np complétude
Chapitre vi np complétude
 
Chapitre iii processeur intel 80x86
Chapitre iii processeur intel 80x86Chapitre iii processeur intel 80x86
Chapitre iii processeur intel 80x86
 
Chapitre ii architecture interne des processeurs
Chapitre ii architecture interne des processeursChapitre ii architecture interne des processeurs
Chapitre ii architecture interne des processeurs
 
Chapitre i architecture générale de l’unité centrale d’un ordinateur
Chapitre i architecture générale de l’unité centrale d’un ordinateurChapitre i architecture générale de l’unité centrale d’un ordinateur
Chapitre i architecture générale de l’unité centrale d’un ordinateur
 
Chapitre iii circuits séquentiels
Chapitre iii circuits séquentielsChapitre iii circuits séquentiels
Chapitre iii circuits séquentiels
 

Kürzlich hochgeladen

Bibdoc 2024 - Ecologie du livre et creation de badge.pdf
Bibdoc 2024 - Ecologie du livre et creation de badge.pdfBibdoc 2024 - Ecologie du livre et creation de badge.pdf
Bibdoc 2024 - Ecologie du livre et creation de badge.pdfBibdoc 37
 
PIE-A2-P 5- Supports stagiaires.pptx.pdf
PIE-A2-P 5- Supports stagiaires.pptx.pdfPIE-A2-P 5- Supports stagiaires.pptx.pdf
PIE-A2-P 5- Supports stagiaires.pptx.pdfRiDaHAziz
 
La Base unique départementale - Quel bilan, au bout de 5 ans .pdf
La Base unique départementale - Quel bilan, au bout de 5 ans .pdfLa Base unique départementale - Quel bilan, au bout de 5 ans .pdf
La Base unique départementale - Quel bilan, au bout de 5 ans .pdfbdp12
 
Pas de vagues. pptx Film français
Pas de vagues.  pptx      Film   françaisPas de vagues.  pptx      Film   français
Pas de vagues. pptx Film françaisTxaruka
 
DIGNITAS INFINITA - DIGNITÉ HUMAINE; déclaration du dicastère .pptx
DIGNITAS INFINITA - DIGNITÉ HUMAINE; déclaration du dicastère .pptxDIGNITAS INFINITA - DIGNITÉ HUMAINE; déclaration du dicastère .pptx
DIGNITAS INFINITA - DIGNITÉ HUMAINE; déclaration du dicastère .pptxMartin M Flynn
 
Présentation - Initiatives - CECOSDA - OIF - Fact Checking.pptx
Présentation - Initiatives - CECOSDA - OIF - Fact Checking.pptxPrésentation - Initiatives - CECOSDA - OIF - Fact Checking.pptx
Présentation - Initiatives - CECOSDA - OIF - Fact Checking.pptxJCAC
 
Faut-il avoir peur de la technique ? (G. Gay-Para)
Faut-il avoir peur de la technique ? (G. Gay-Para)Faut-il avoir peur de la technique ? (G. Gay-Para)
Faut-il avoir peur de la technique ? (G. Gay-Para)Gabriel Gay-Para
 
Apprendre avec des top et nano influenceurs
Apprendre avec des top et nano influenceursApprendre avec des top et nano influenceurs
Apprendre avec des top et nano influenceursStagiaireLearningmat
 
Cours de Management des Systèmes d'information
Cours de Management des Systèmes d'informationCours de Management des Systèmes d'information
Cours de Management des Systèmes d'informationpapediallo3
 
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdfBibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdfBibdoc 37
 
Pas de vagues. pptx Film français
Pas de vagues.  pptx   Film     françaisPas de vagues.  pptx   Film     français
Pas de vagues. pptx Film françaisTxaruka
 
Bibdoc 2024 - L’Éducation aux Médias et à l’Information face à l’intelligence...
Bibdoc 2024 - L’Éducation aux Médias et à l’Information face à l’intelligence...Bibdoc 2024 - L’Éducation aux Médias et à l’Information face à l’intelligence...
Bibdoc 2024 - L’Éducation aux Médias et à l’Information face à l’intelligence...Bibdoc 37
 
Vulnérabilité numérique d’usage : un enjeu pour l’aide à la réussitepdf
Vulnérabilité numérique d’usage : un enjeu pour l’aide à la réussitepdfVulnérabilité numérique d’usage : un enjeu pour l’aide à la réussitepdf
Vulnérabilité numérique d’usage : un enjeu pour l’aide à la réussitepdfSylvianeBachy
 
PIE-A2-P4-support stagiaires sept 22-validé.pdf
PIE-A2-P4-support stagiaires sept 22-validé.pdfPIE-A2-P4-support stagiaires sept 22-validé.pdf
PIE-A2-P4-support stagiaires sept 22-validé.pdfRiDaHAziz
 
Chana Orloff.pptx Sculptrice franco-ukranienne
Chana Orloff.pptx Sculptrice franco-ukranienneChana Orloff.pptx Sculptrice franco-ukranienne
Chana Orloff.pptx Sculptrice franco-ukranienneTxaruka
 
Potentiel du Maroc en Produits du Terroir et Stratégie Adoptée pour le dévelo...
Potentiel du Maroc en Produits du Terroir et Stratégie Adoptée pour le dévelo...Potentiel du Maroc en Produits du Terroir et Stratégie Adoptée pour le dévelo...
Potentiel du Maroc en Produits du Terroir et Stratégie Adoptée pour le dévelo...NaimDoumissi
 
Bernard Réquichot.pptx Peintre français
Bernard Réquichot.pptx   Peintre françaisBernard Réquichot.pptx   Peintre français
Bernard Réquichot.pptx Peintre françaisTxaruka
 

Kürzlich hochgeladen (18)

Bibdoc 2024 - Ecologie du livre et creation de badge.pdf
Bibdoc 2024 - Ecologie du livre et creation de badge.pdfBibdoc 2024 - Ecologie du livre et creation de badge.pdf
Bibdoc 2024 - Ecologie du livre et creation de badge.pdf
 
PIE-A2-P 5- Supports stagiaires.pptx.pdf
PIE-A2-P 5- Supports stagiaires.pptx.pdfPIE-A2-P 5- Supports stagiaires.pptx.pdf
PIE-A2-P 5- Supports stagiaires.pptx.pdf
 
La Base unique départementale - Quel bilan, au bout de 5 ans .pdf
La Base unique départementale - Quel bilan, au bout de 5 ans .pdfLa Base unique départementale - Quel bilan, au bout de 5 ans .pdf
La Base unique départementale - Quel bilan, au bout de 5 ans .pdf
 
Pas de vagues. pptx Film français
Pas de vagues.  pptx      Film   françaisPas de vagues.  pptx      Film   français
Pas de vagues. pptx Film français
 
DIGNITAS INFINITA - DIGNITÉ HUMAINE; déclaration du dicastère .pptx
DIGNITAS INFINITA - DIGNITÉ HUMAINE; déclaration du dicastère .pptxDIGNITAS INFINITA - DIGNITÉ HUMAINE; déclaration du dicastère .pptx
DIGNITAS INFINITA - DIGNITÉ HUMAINE; déclaration du dicastère .pptx
 
Présentation - Initiatives - CECOSDA - OIF - Fact Checking.pptx
Présentation - Initiatives - CECOSDA - OIF - Fact Checking.pptxPrésentation - Initiatives - CECOSDA - OIF - Fact Checking.pptx
Présentation - Initiatives - CECOSDA - OIF - Fact Checking.pptx
 
Faut-il avoir peur de la technique ? (G. Gay-Para)
Faut-il avoir peur de la technique ? (G. Gay-Para)Faut-il avoir peur de la technique ? (G. Gay-Para)
Faut-il avoir peur de la technique ? (G. Gay-Para)
 
Apprendre avec des top et nano influenceurs
Apprendre avec des top et nano influenceursApprendre avec des top et nano influenceurs
Apprendre avec des top et nano influenceurs
 
Cours de Management des Systèmes d'information
Cours de Management des Systèmes d'informationCours de Management des Systèmes d'information
Cours de Management des Systèmes d'information
 
Bulletin des bibliotheques Burkina Faso mars 2024
Bulletin des bibliotheques Burkina Faso mars 2024Bulletin des bibliotheques Burkina Faso mars 2024
Bulletin des bibliotheques Burkina Faso mars 2024
 
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdfBibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
 
Pas de vagues. pptx Film français
Pas de vagues.  pptx   Film     françaisPas de vagues.  pptx   Film     français
Pas de vagues. pptx Film français
 
Bibdoc 2024 - L’Éducation aux Médias et à l’Information face à l’intelligence...
Bibdoc 2024 - L’Éducation aux Médias et à l’Information face à l’intelligence...Bibdoc 2024 - L’Éducation aux Médias et à l’Information face à l’intelligence...
Bibdoc 2024 - L’Éducation aux Médias et à l’Information face à l’intelligence...
 
Vulnérabilité numérique d’usage : un enjeu pour l’aide à la réussitepdf
Vulnérabilité numérique d’usage : un enjeu pour l’aide à la réussitepdfVulnérabilité numérique d’usage : un enjeu pour l’aide à la réussitepdf
Vulnérabilité numérique d’usage : un enjeu pour l’aide à la réussitepdf
 
PIE-A2-P4-support stagiaires sept 22-validé.pdf
PIE-A2-P4-support stagiaires sept 22-validé.pdfPIE-A2-P4-support stagiaires sept 22-validé.pdf
PIE-A2-P4-support stagiaires sept 22-validé.pdf
 
Chana Orloff.pptx Sculptrice franco-ukranienne
Chana Orloff.pptx Sculptrice franco-ukranienneChana Orloff.pptx Sculptrice franco-ukranienne
Chana Orloff.pptx Sculptrice franco-ukranienne
 
Potentiel du Maroc en Produits du Terroir et Stratégie Adoptée pour le dévelo...
Potentiel du Maroc en Produits du Terroir et Stratégie Adoptée pour le dévelo...Potentiel du Maroc en Produits du Terroir et Stratégie Adoptée pour le dévelo...
Potentiel du Maroc en Produits du Terroir et Stratégie Adoptée pour le dévelo...
 
Bernard Réquichot.pptx Peintre français
Bernard Réquichot.pptx   Peintre françaisBernard Réquichot.pptx   Peintre français
Bernard Réquichot.pptx Peintre français
 

Chapitre 6 hachage statique

  • 1. CHAPITRE VI: HACHAGE STATIQUE Université Saad Dahlab de Blida Faculté des Sciences Département d’Informatique Licence d’Informatique Semestre 4 (2ème année) Algorithmique et Structures de Données Mme AROUSSI 2014-2015 Disponible sur https://sites.google.com/a/esi.dz/s-aroussi/
  • 2.  Introduction  Principe du hachage  Terminologie  Fonctions de Hachage  Méthodes de résolution de collisions  Estimation des débordements  Conclusion 2 PLAN DU CHAPITRE V
  • 3. 3  Problématique: Supposons que l'on veuille ranger des données (enregistrements) qui arrivent dans un ordre quelconque dans un tableau.  Solutions Possibles: Il existe, en général, deux façons de les ranger : 1. Si le tableau est non ordonné alors  Recherche est séquentielle  O(n)  Lent  Insertion se fait à la fin du tableau  O(1)  Rapide INTRODUCTION
  • 4. 4  Solutions Possibles: Il existe, en général, deux façons de les ranger : 1. Si le tableau est non ordonné alors  Recherche est séquentielle  O(n)  Lent  Insertion se fait à la fin du tableau  O(1)  Rapide 2. Si le tableau est ordonné alors  Recherche est dichotomique  O(Log2(n)) Rapide  Insertion provoque un décalage des éléments du tableau  O(n) Lent INTRODUCTION
  • 5. 5  Une troisième possibilité de ranger une donnée dans un tableau :  Ranger la donnée « x » à un emplacement « y » calculé par une fonction « h » tel que y = h(x)  On parle ici de table de rangement dispersé ou technique de HACHAGE ( en anglais "Hashing" ).  Dans ce type de rangement, que ce soit pour insérer ou rechercher une donnée, on procédera toujours aussi rapidement ( O(c) ) INTRODUCTION
  • 6. 6 PRINCIPE x2 x4 x8 x6 x5 x1 x3 x7 x3 x8 x5 x2 x1 x7 x4 x6 0 1 2 3 4 5 6 .. N-1 .. .. Table de Hachage « TH » h(x) Données à stocker Rangement par calcul d'adresse La fonction « h » doit retourner des valeurs comprises entre 0 et N-1 Le calcul d'adresse permet de stocker des données (x) dans une table (TH) de taille N, en utilisant une fonction (h) x5 ?
  • 7. 7  La fonction h est appelé fonction de hachage.  L’adresse primaire (h(x)) d’une donnée x est le résultat retourné par la fonction de hachage h  Les synonymes sont les données qui ont la même adresse primaire, i.e. x1 et x2 sont des synonymes ssi h(x1) = h(x2). On dit aussi que x1 et x2 sont en collisions.  On parle de débordement lorsqu’il y a une donnée qui n’est pas dans son adresse primaire. On dit aussi qu'elle est rangée dans une adresse secondaire.  L’adresse secondaire est déterminé par une méthode donnée, on parle de méthode de résolution de collisions TERMINOLOGIE
  • 8. 8 PRINCIPE x2 x4 x8 x6 x1 x3 x7 x3 x8 x5 x2 x1 x7 x4 x6 0 1 2 3 4 5 6 .. N-1 .. .. Table de Hachage « T » h(x) Données à stocker Rangement par calcul d'adresse Pour utiliser une technique de hachage, on doit donc définir: 1. une fonction de hachage « h » 2. une méthode de résolution des collisions x5 ?
  • 9. 9  Il s’agit de trouver une fonction h tels que 0 ≤ h(x) < N qui réduit au maximum le nombre de collisions.  L'idéal, c'est d'avoir une fonction de hachage bijective c'est à dire une fonction qui attribue pour chaque donnée à insérer un nouvel emplacement dans le tableau.  Le pire des cas, c'est lorsque toute donnée est hachée en une même adresse.  Une solution acceptable est une solution où certaines données partagent la même adresse (h est surjective). FONCTIONS DE HACHAGE
  • 10. 10  Il existe plusieurs fonctions de hachage, les plus utilisées: 1. La fonction de division 2. La fonction dite du milieu du carré « middle square » 3. La fonction dite du « transformation radix » FONCTIONS DE HACHAGE
  • 11. 11 1. La fonction de division: h(x) = x MOD N  Elle retourne le reste de la division par N où N est la taille de la table  C’est une fonction facile et rapide à calculer mais sa qualité dépend de la valeur de N.  Il est démontré que :  c'est très mauvais de choisir N une puissance de 2.  N premier constitue généralement un bon choix. FONCTIONS DE HACHAGE
  • 12. 12 1. La fonction de division: h(x) = x MOD N  Exemple: calculer la fonction de hachage des données suivantes: FONCTIONS DE HACHAGE X N = 10 N = 11 5 5 5 55 5  collision 0 23 3 1 453 3  collision 2 Pas de collisions dans le cas où N=11 car N est un nombre premier
  • 13. 13 2. La fonction du milieu du carré « middle square »  On élève la donnée x au carré x2 et on prend les chiffres du milieu  Cette méthode donne de bons résultats si le nombre au carré n’a pas de zéros.  Exemple: calculer la fonction de hachage des données suivantes : FONCTIONS DE HACHAGE X X2 N = 10 N = 100 500 250000 0 0 12 144 4 14 ou 44 453 205209 5 ou 2 52
  • 14. 14 3. La fonction de transformation radix : h(x) = (x)b MOD N  On convertit la donnée « x » dans une base de numération « b » et on prend le reste de la division sur « N ».  Exemple: calculer la fonction de hachage des données suivantes dans le cas où b = 11 et N = 10 ou 100 : FONCTIONS DE HACHAGE X10 X11 N = 10 N = 100 12 11 1 11 453 382 2 82
  • 15. 15  En conclusion, il n’y a pas de fonction de hachage universelle.  Cependant, une bonne fonction doit être:  rapide à calculer  répartit uniformément les éléments  Elle dépend donc:  de la machine  des éléments  Mais aucune fonction n’évite les collisions, qu’il va falloir traiter. FONCTIONS DE HACHAGE
  • 16. 16  Exercice 1: Soit E = {a, b, c, d, e, f, g, h} un ensemble d’enregistrement. On veut insérer ces enregistrements dans une table de hachage de 10 cases selon leur clé: 1. Calculer l’adresse primaire de chaque enregistrement dans les cas où la fonction de hachage est une fonction : a. De division, i.e : h(x) = x MOD N b. Du milieu du carré, i.e on élève la donnée x au carré x2 et on prend le chiffre du milieu c. De transformation radix, i.e : (x)b MOD N et b = 11 FONCTION DE HACHAGE Enregistrement a b c d e f g h Clé 5 51 23 453 500 12 38 42
  • 17. 17  Exercice 1: Soit E = {a, b, c, d, e, f, g, h} un ensemble d’enregistrement. On veut insérer ces enregistrements dans une table de hachage de 10 cases selon leur clé: 1. Calculer l’adresse primaire de chaque enregistrement FONCTIONS DE HACHAGE Enregistrement a b c d e f g h Clé ou x 5 51 23 453 500 12 38 42 x MOD N 5 1 3 3 0 2 8 2 Milieu du carré 2 6 2 5 0 4 4 7 5 0 2 6 (x)11 MOD N 5 7 1 2 5 1 5 9
  • 18. 18  Lors de l'insertion de x, si l'adresse primaire h(x) est déjà utilisée par une autre donnée, la méthode de résolution de collision permet de trouver un autre emplacement (libre) pour x. MÉTHODES DE RÉSOLUTION DE COLLISIONS
  • 19. 19  Pour résoudre les collisions, deux stratégies se présentent: a. Les méthodes directes ou le hachage par calcul de l’emplacement: 1. Essai linéaire 2. Double hachage b. Les méthodes indirectes ou le hachage par chainage: 3. Chainage séparée 4. Chainage interne MÉTHODES DE RÉSOLUTION DE COLLISIONS
  • 20. 20 1. Essai linéaire:  S’il se produit une collision sur la case h(x), on essaie les cases qui la précèdent : h(x)-1, h(x)-2, h(x)-3,..., 0, N-1, N-2, …, jusqu'à trouver une case vide.  La rencontre d'une case vide indique que la donnée n'existe pas.  Il faudra sacrifier une case vide dans la table de hachage pour que la séquence de test soit finie. MÉTHODES DE RÉSOLUTION DE COLLISIONS
  • 21. 21 1. Essai linéaire: Exercice 1 (Question2. a): MÉTHODES DE RÉSOLUTION DE COLLISIONS Enregistrement a b c d e f g j h (x) 5 1 3 3 0 2 8 2 Indice Vide enregistrement 0 V 1 V 2 V 3 V 4 V 5 V 6 V 7 V 8 V 9 V Etat initial de Table de Hachage Indice Vide enregistrement 0 V 1 F b 2 V 3 F c 4 V 5 F a 6 V 7 V 8 V 9 V Après l’insertion de a, b et c
  • 22. 22 1. Essai linéaire: Exercice 1 (Question2. a): MÉTHODES DE RÉSOLUTION DE COLLISIONS Enregistrement a b c d e f g j h (x) 5 1 3 3 0 2 8 2 Indice Vide enregistrement 0 V 1 F b 2 F d 3 F c 4 V 5 F a 6 V 7 V 8 V 9 V ↑ collision Calcul de h(d) -1 = 2  case vide
  • 23. 23 1. Essai linéaire: Exercice 1 (Question2. a): MÉTHODES DE RÉSOLUTION DE COLLISIONS Enregistrement a b c d e f g j h (x) 5 1 3 3 0 2 8 2 Après l’insertion de e Indice Vide enregistrement 0 F e 1 F b 2 F d 3 F c 4 V 5 F a 6 V 7 V 8 V 9 V ↑ collision Calcul de h(f) - 1 = 1  case pleine Calcul de h(f) - 2 = 0  case pleine Calcul de h(f) - 3 + 10 = 9  case vide
  • 24. 24 1. Essai linéaire: Exercice 1 (Question2. a): MÉTHODES DE RÉSOLUTION DE COLLISIONS Enregistrement a b c d e f g j h (x) 5 1 3 3 0 2 8 2 Après l’insertion de f, g Indice Vide enregistrement 0 F e 1 F b 2 F d 3 F c 4 V 5 F a 6 V 7 V 8 F g 9 F f ↑ collision Calcul de h(j) - 1 = 1  case pleine Calcul de h(j) - 2 = 0  case pleine Calcul de h(j) - 3 + 10 = 9  case pleine Calcul de h(j) - 4 + 10 = 8  case pleine Calcul de h(j) - 5 + 10 = 7  case vide
  • 25. 25 1. Essai linéaire: Exercice 1 (Question2. a): MÉTHODES DE RÉSOLUTION DE COLLISIONS Enregistrement a b c d e f g j h (x) 5 1 3 3 0 2 8 2 Après l’insertion de j Indice Vide enregistrement 0 F e 1 F b 2 F d 3 F c 4 V 5 F a 6 V 7 F j 8 F g 9 F f
  • 26. 26 1. Essai linéaire: MÉTHODES DE RÉSOLUTION DE COLLISIONS Indice Vide 0 F e 1 F b 2 F d 3 F c 4 V 5 F a 6 V 7 F j 8 F g 9 F f Enregistrement a b c d e f g j h (x) 5 1 3 3 0 2 8 2 Adresse Primaire P P Secondaire P S P S La recherche de « k » (tel que h(k) = 2) s'arrête avec un échec dans la case vide d‘indice 6 la séquence de test est : 2, 1, 0, 9, 8, 7  Si on devait insérer « k », la donnée serait affectée à la case 6 (si c'est pas la dernière case vide).  La table est remplie quand le nombre d’éléments insérés égale à N-1  sacrifice d’une case vide
  • 27. 27 1. Essai linéaire:  La recherche d’une donnée x se déroule comme suit: a. Calculer l’adresse primaire de x (soit i = h(x)) b. Si la case « i » de table de hachage contient la donné x alors la recherche est terminée. c. Sinon rechercher la donnée x dans les cases qui la précèdent : i-1, i-2, i-3,..., 0, N-1, N-2, …, jusqu'à trouver la donnée x ou une case vide. d. Si on s’arrête avec une case vide, cela signifie que la donnée n’existe pas. MÉTHODES DE RÉSOLUTION DE COLLISIONS
  • 28. 28 1. Essai linéaire: Exercice 2 (Question 1.a) MÉTHODES DE RÉSOLUTION DE COLLISIONS Type Tcase = Structure Donnée: TQQ Vide: booléen initialisé à vrai Fin Var TH: Tableau [0 .. N-1] de Tcase
  • 29. 29 1. Essai linéaire: Exercice 2 (Question 1. b) MÉTHODES DE RÉSOLUTION DE COLLISIONS Procédure rechercher_TH_EL(TH: tableau de hachage, x: TQQ, Var i:entier, Var trouve : booléen) i H(x.clé) // calculer l’adresse primaire TQ (TH[i].vide = faux) et (TH[i] .donnée≠ x) faire DTQ ii-1 Si i<0 alors i i+N FTQ Si (TH[i]. Vide = faux) et (TH[i].donnée = x) alors trouve vrai Sinon trouve  faux
  • 30. 30 1. Essai linéaire:  L’insertion d’une donnée x se déroule comme suit: a. Calculer l’adresse primaire de x (soit i = h(x)) b. Si la case « i » de table de hachage est vide alors insérer x dans cette case et la marquer comme non vide. c. Sinon, parcourir les cases qui la précèdent : i-1, i-2, i-3,..., 0, N-1, N-2, …, jusqu'à trouver une case vide (soit « j »). d. Insérer « x » dans la case « j » et la marquer comme non vide. MÉTHODES DE RÉSOLUTION DE COLLISIONS
  • 31. 31 1. Essai linéaire: Exercice 2 (Question 1. b) MÉTHODES DE RÉSOLUTION DE COLLISIONS Procédure insérer_TH_EL(Var TH: tableau de hachage, x: TQQ) Debut Si non TH_rempli (TH) alors // vérifier que le TH n’est pas rempli i H(x.clé) // calculer l’adresse primaire TQ (TH[i].vide = faux) faire DTQ ii-1 Si i<0 alors i i+N FTQ TH[i].donnée x TH[i].vide faux Fsi Fin Fonction TH_remplie( TH: tableau de hachage) : booléen Cpt 0 Pour i 0 à N-1 faire Si TH[i]. vide = vrai alors Cpt ++ Retourner (Cpt =1) // on sacrifie d’une case libre.
  • 32. 32 1. Essai linéaire:  La suppression physique d'une donnée x, génère une case vide  Cette nouvelle case vide risque de rendre d'autres données inaccessibles.  Par exemple, si on supprime b en vidant la case 1, on perd du même coup la donnée f (h(f) = 2) car elle n'est plus accessible.  On doit alors faire des tests avant de vider une case MÉTHODES DE RÉSOLUTION DE COLLISIONS Indice Vide 0 F e 1 V b 2 F d 3 F c 4 V 5 F a 6 V 7 F j 8 F g 9 F f
  • 33. 33 1. Essai linéaire:  Le principe de la suppression d'une donnée x est donc : a. Rechercher l'adresse i de x b. Parcourir toutes les cases qui la précèdent : j = i-1, i- 2, i-3,..., 0, N-1, N-2, …, jusqu’à trouver une case vide. Pour chaque case j, vérifier que sa donnée reste accessible si la case i sera vidée. c. Si toutes les cases j restent accessibles en vidant i, alors on vide la case i et on s'arrête MÉTHODES DE RÉSOLUTION DE COLLISIONS
  • 34. 34 1. Essai linéaire:  Le principe de la suppression d'une donnée x est donc : d. Sinon, déplacer la case j dans la case i et tenter de vider son emplacement en testant les cases au dessus qui n'ont pas encore été testées. C'est le même principe qu'on vient d'appliquer pour la case i. MÉTHODES DE RÉSOLUTION DE COLLISIONS i j 0 N-1 i j 0 N-1
  • 35. 35 1. Essai linéaire:  Par exemple, si on supprime b en vidant la case 1, On va décaler la donnée f (h(f) = 2) à la case 1 et, la donnée j (h(j) = 2) à la case 9. MÉTHODES DE RÉSOLUTION DE COLLISIONS Indice Vide 0 F e 1 F f 2 F d 3 F c 4 V 5 F a 6 V 7 V 8 F g 9 F j Indice Vide 0 F e 1 V b 2 F d 3 F c 4 V 5 F a 6 V 7 F j 8 F g 9 F f
  • 36. 36 1. Essai linéaire: Exercice 2 (Question 1. b) MÉTHODES DE RÉSOLUTION DE COLLISIONS Procédure supprimer_TH_EL(Var TH: tableau de hachage, x: TQQ) Rechercher (TH, x, i, trouve) Si trouve = vrai alors j  i-1 Si j<0 alors jj+N TQ (T[j]. vide ≠ vrai) DTQ // calculer l’adresse primaire de la donnée j k  H(TH[j].donnée.clé) Si ((i>j) et (k ≥i ou k<j)) ou ((i<j) et (i≤k<j)) TH[i]T[ j]; ij jj-1 Si j<0 alors jj+N FTQ T[i].vide vrai i j 0 N-1 i j 0 Cas 2Cas 1 N-1
  • 37. 37 1. Essai linéaire:  Un moyen simple consiste à faire une suppression logique, c'est à dire le positionnement d'un bit pour indiquer si la donnée a été effacée ou pas.  Chaque case renferme donc 2 bits :  Vide indiquant une case vide  Effacé indiquant un effacement logique (la case n'est pas vide) exemple: b est supprimée logiquement MÉTHODES DE RÉSOLUTION DE COLLISIONS Indice Vide Effacé donnée 0 F F e 1 F V b 2 F F d 3 F F c 4 V V 5 F F a 6 V V 7 F F j 8 F F g 9 F F f
  • 38. 38 1. Essai linéaire:  Un moyen simple consiste à faire une suppression logique, c'est à dire le positionnement d'un bit qu'on rajoute au niveau des entrées de la table.  Pour récupérer l'espace perdu à cause des effacements logiques, on effectue des réorganisations périodiques. C.à.d. réinsérer les données non effacées dans une nouvelle table. MÉTHODES DE RÉSOLUTION DE COLLISIONS Indice Vide Effacé donnée 0 F F e 1 F V b 2 F F d 3 F F c 4 V V 5 F F a 6 V V 7 F F j 8 F F g 9 F F f
  • 39. 39 1. Essai linéaire:  Un moyen simple consiste à faire une suppression logique, c'est à dire le positionnement d'un bit qu'on rajoute au niveau des entrées de la table.  Pour récupérer l'espace perdu à cause des effacements logiques, on effectue des réorganisations périodiques. C.à.d. réinsérer les données non effacées dans une nouvelle table. MÉTHODES DE RÉSOLUTION DE COLLISIONS Indice Vide Effacé donnée 0 F F e 1 F V b 2 F F d 3 F F c 4 V V 5 F F a 6 V V 7 F F j 8 F F g 9 F F f
  • 40. 40 1. Essai linéaire: Exercice 2 (Question 2. a)  La recherche doit retourner vrai si (TH[i]. Effacé = faux) et (TH[i].donné = x) au lieu (TH[i]. Vide = faux) et (TH[i].donné = x) MÉTHODES DE RÉSOLUTION DE COLLISIONS Type Tcase = Structure Donnée: TQQ Vide: booléen initialisé à vrai Effacé: booléen initialisé à vrai Fin Var TH: Tableau [0 .. N-1] de Tcase
  • 41. 41 1. Essai linéaire: Exercice 2 (Question 2. b)  L’insertion peut se faire dans une case effacée MÉTHODES DE RÉSOLUTION DE COLLISIONS Procédure insérer_TH_EL(Var TH: tableau de hachage, x: TQQ) Si non TH_rempli (TH) alors // vérifier que le TH n’est pas rempli i H(x.clé) // calculer l’adresse primaire TQ (TH[i].effacé = faux) faire DTQ ii-1 Si i<0 alors i i+N FTQ TH[i].donnée x TH[i].vide faux TH[i].effacéfaux
  • 42. 42 1. Essai linéaire: Exercice 2 (Question 2. b)  La suppression consiste à positionner l’indicateur « effacé » à vrai MÉTHODES DE RÉSOLUTION DE COLLISIONS Procédure supprimer_TH_EL(Var TH: tableau de hachage, x: TQQ) Debut Rechercher_TH_EL (TH, x, i, trouve) Si trouve = vrai alors T[i].effacé vrai Fin
  • 43. 43 1. Essai linéaire: Exercice 2 (Question 2. b)  La réorganisation consiste à réinsérer les données non effacées dans une nouvelle table. MÉTHODES DE RÉSOLUTION DE COLLISIONS Procédure réorganiser _TH(Var TH: Tableau de hachage) Var Tmp: Tableau de Hachage; i: entier Debut Pour i0 à N-1 faire Si (TH[i].effacé = faux) alors Insérer_TH (Tmp, TH[i].donné) //recopier le tableau Tmp dans TH Pour i0 à N-1 faire THi] Tmp[ [i] Fin
  • 44. 44 2. Double Hachage :  Cette méthode est presque analogue à la méthode d’essai linéaire mais au lieu que la séquence soit linéaire, elle est construite par une autre fonction de hachage soit h’.  Soient h(x) la fonction utilisée pour le calcul de l'adresse primaire et h'(x) la seconde fonction de hachage qui calcule le pas de la séquence: h(x), h(x)-h'(x), h(x)-2h'(x), h(x)- 3h'(x), ...  Pour que cette séquence soit circulaire, on rajoute N au nouvel indice s’il est négatif. MÉTHODES DE RÉSOLUTION DE COLLISIONS
  • 45. 45 2. Double Hachage : Exercice 1 (Question2): MÉTHODES DE RÉSOLUTION DE COLLISIONS Enregistrement a b c d e f g j h (x) 5 1 3 3 0 2 8 2 h‘(x) 2 4 1 3 3 1 5 2 Indice Vide donné 0 V 1 V 2 V 3 V 4 V 5 V 6 V 7 V 8 V 9 V Après l’insertion de a, b et c Indice Vide donné 0 V 1 F b 2 V 3 F c 4 V 5 F a 6 V 7 V 8 V 9 V
  • 46. 46 2. Double Hachage : Exercice 1 (Question2): MÉTHODES DE RÉSOLUTION DE COLLISIONS Enregistrement a b c d e f g j h (x) 5 1 3 3 0 2 8 2 h‘(x) 2 4 1 3 3 1 5 2 Indice Vide donné 0 V 1 F b 2 V 3 F c 4 V 5 F a 6 V 7 V 8 V 9 V ↑ collision Calcul de h(d) -h’(d) = 0  case vide
  • 47. 47 2. Double Hachage : Exercice 1 (Question2): MÉTHODES DE RÉSOLUTION DE COLLISIONS Enregistrement a b c d e f g j h (x) 5 1 3 3 0 2 8 2 h‘(x) 2 4 1 3 3 1 5 2 Indice Vide donné 0 F d 1 F b 2 V 3 F c 4 V 5 F a 6 V 7 V 8 V 9 V ↑ collision Calcul de h(e) -h’(e) + 10 = 7  case vide
  • 48. 48 2. Double Hachage : Exercice 1 (Question2): MÉTHODES DE RÉSOLUTION DE COLLISIONS Enregistrement a b c d e f g j h (x) 5 1 3 3 0 2 8 2 h‘(x) 2 4 1 3 3 1 5 2 Indice Vide donné 0 F d 1 F b 2 V 3 F c 4 V 5 F a 6 V 7 F e 8 V 9 V Après l’insertion de f et g Indice Vide donné 0 F d 1 F b 2 V f 3 F c 4 V 5 F a 6 V 7 F e 8 V g 9 V
  • 49. 49 2. Double Hachage : Exercice 1 (Question2): MÉTHODES DE RÉSOLUTION DE COLLISIONS Enregistrement a b c d e f g j h (x) 5 1 3 3 0 2 8 2 h‘(x) 2 4 1 3 3 1 5 2 Indice Vide donné 0 F d 1 F b 2 V f 3 F c 4 V 5 F a 6 V 7 F e 8 V g 9 V ↑ collision Calcul de h(j) – h’(j) = 0  case pleine Calcul de h(j) - 2 h’(j) + 10= 8  case pleine Calcul de h(j) - 3 h’(j) + 10 = 6  case vide
  • 50. 50 2. Double Hachage : Exercice 1 (Question2): MÉTHODES DE RÉSOLUTION DE COLLISIONS Enregistrement a b c d e f g j h (x) 5 1 3 3 0 2 8 2 h‘(x) 2 4 1 3 3 1 5 2 Indice Vide donné 0 F d 1 F b 2 V f 3 F c 4 V 5 F a 6 F j 7 F e 8 V g 9 V La recherche de « k » (tel que h(k) = 2 et h’(k) = 2) s'arrête avec un échec dans la case vide d‘indice 4 la séquence de test est : 2, 0, 8, 6  Si on devait insérer « k », la donnée serait affectée à la case 4 (si c'est pas la dernière case vide).  La table est remplie quand le nombre d’éléments insérés égale à N-1  sacrifice d’une case vide
  • 51. 51 2. Double Hachage : Exercice 1 (Question2): MÉTHODES DE RÉSOLUTION DE COLLISIONS Enregistrement a b c d e f g j h (x) 5 1 3 3 0 2 8 2 h‘(x) 2 4 1 3 3 1 5 2 Indice Vide donné 0 F d 1 F b 2 V f 3 F c 4 V 5 F a 6 F j 7 F e 8 V g 9 V La recherche de « k » (tel que h(k) = 2 et h’(k) = 5) génère une boucle infinie la séquence de test est : 2, 7, 2, 7, 2, 7, 2, 7, ….. On s’arrête après avoir visité (N-1) cases. Pour que la couverture soit totale (passer par toutes les cases), il faut choisir la taille de la table N un nombre premier
  • 52. 52 2. Double Hachage :  Le principe de la recherche est analogue à celui de l'essai linéaire. a. Calculer l’adresse primaire de x (soit i = h(x)) b. Si la case « i » de table de hachage contient la donné x alors la recherche est terminée. c. Sinon rechercher la donnée x dans les cases qui la précèdent : j= i-h'(x), i-2h'(x), i-3h'(x),…. [si j<0 alors j j+N] jusqu'à trouver la donnée x ou une case vide ou visiter N-1 cases. d. Si on s’arrête avec une case vide ou après avoir visité N-1 cases, cela signifie que la donnée n’existe pas. MÉTHODES DE RÉSOLUTION DE COLLISIONS
  • 53. 53 2. Double Hachage : Exercice 2 (Question 2. a) MÉTHODES DE RÉSOLUTION DE COLLISIONS Procédure rechercher_TH_DH(TH: tableau de hachage, x: TQQ, Var i:entier, Var trouve : booléen) i h(x.clé) // calculer l’adresse primaire Cpt 0 // compter le nombre des cases visitées TQ (TH[i].vide = faux) et (TH[i] . donnée≠ x) et (Cpt < N-1) faire DTQ ii-h’(x) Si i<0 alors i i+N Cpt ++; FTQ Si (TH[i]. Vide = faux) et (TH[i].donné = x) alors trouve vrai Sinon trouve  faux
  • 54. 54 2. Double Hachage :  L’insertion d’une donnée x se déroule comme suit: a. Calculer l’adresse primaire de x (soit i = h(x)) b. Si la case « i » de table de hachage est vide alors insérer x dans cette case et la marquer comme non vide. c. Sinon, parcourir les cases qui la précèdent : j= i-h'(x), i- 2h'(x), i-3h'(x),…. [si j<0 alors j j+N], jusqu'à trouver une case vide (soit « j ») ou visiter N-1 cases. d. Si on trouve une case vide alors insérer « x » dans la case « j » et la marquer comme non vide. MÉTHODES DE RÉSOLUTION DE COLLISIONS
  • 55. 55 2. Double Hachage : Exercice 2 (Question 2. a) MÉTHODES DE RÉSOLUTION DE COLLISIONS Procédure insérer_TH_DH(Var TH: tableau de hachage, x: TQQ) Debut Si non TH_rempli (TH) alors // vérifier que le TH n’est pas rempli i h(x.clé) // calculer l’adresse primaire Cpt 0 // compter le nombre des cases visitées TQ (TH[i].vide = faux) et (Cpt < N-1) faire DTQ ii-h’(x.clé) Si i<0 alors i i+N Cpt ++; FTQ Si (TH[i].vide = vrai) alors // on a trouvé une case vide TH[i].donnée x TH[i].vide faux Fin
  • 56. 56 2. Double Hachage :  Le principe de la suppression (logique et physique) est analogue à la méthode d’essai de linéaire.  La seule différence que dans la suppression physique, le pas de la séquence est calculé par la seconde fonction de hachage: j= i-h'(x), i-2h'(x), i-3h'(x),…. [si j<0 alors j j+N]. MÉTHODES DE RÉSOLUTION DE COLLISIONS
  • 57. 57 2. Double Hachage :  Exemple d’une suppression physique: supprimer la donnée « c » Cette suppression entraine le déplacement de la donnée « d » à la case 3 et la donnée « e » à la case 0 MÉTHODES DE RÉSOLUTION DE COLLISIONS Indice Vide donné 0 F d 1 F b 2 V f 3 F c 4 V 5 F a 6 F j 7 F e 8 V g 9 V Indice Vide donné 0 F e 1 F b 2 V f 3 F d 4 V 5 F a 6 F j 7 V 8 V g 9 V
  • 58. 58 2. Double Hachage : Exercice 2 (Question 2. a) MÉTHODES DE RÉSOLUTION DE COLLISIONS Procédure supprimer_TH_DH(Var TH: tableau de hachage, x: TQQ) Rechercher (TH, x, i, trouve) Si trouve = vrai alors j  i-h’(x.donnée.clé) Si j<0 alors jj+N TQ (T[j]. vide ≠ vrai) DTQ // calculer l’adresse primaire de la donnée j k  H(TH[j].donnée.clé) Si ((i>j) et (k ≥i ou k<j)) ou ((i<j) et (i≤k<j)) TH[i]T[ j]; ij jj-h’(x.donnée.clé) Si j<0 alors jj+N FTQ T[i].vide vrai i j 0 N-1 i j 0 Cas 2Cas 1 N-1
  • 59. 59 3. Chaînage séparé :  Les données en débordement (en cas de collisions) sont stockés dans un espace non «adressable» par la fonction de hachage. Par exemple à l'extérieur de la table sous forme de Liste Linéaire Chaînée (LLC). MÉTHODES DE RÉSOLUTION DE COLLISIONS Indice Vide donné lien 0 F e Null 1 F b Null 2 F f 3 F c 4 V Null 5 F a Null 6 V Null 7 V Null 8 F g Null 9 V Null d Null j k Null h(f) = h(j) = h(k) = 2 h(c) = h(d) = 3  Le champ « lien » lie les données en cases primaires avec leurs synonymes en débordement.  Le nombre de données insérées peut dépasser la taille de la table (N)
  • 60. 60 3. Chaînage séparé :  La recherche d’une donnée x se déroule comme suit: a. Calculer l’adresse primaire de x (soit i = h(x)) b. Si la case « i » de table de hachage contient la donné x alors la recherche est terminée. c. Sinon continuer la recherche séquentielle dans la liste « lien » MÉTHODES DE RÉSOLUTION DE COLLISIONS
  • 61. 61 3. Chaînage séparé : Exercice 2 (Question 1.a) MÉTHODES DE RÉSOLUTION DE COLLISIONS Type Maillon = Structure Val: TQQ Suiv: * Maillon initialisé à NULL Fin Type Tcase = Structure Donnée: TQQ Lien : *Maillon Vide: booléen initialisé à vrai Fin Var TH: Tableau [0 .. N-1] de Tcase
  • 62. 62 3. Chaînage séparé : Exercice 2 (Question 1.b) MÉTHODES DE RÉSOLUTION DE COLLISIONS Procédure rechercher_TH_CS(TH: tableau de hachage, x: TQQ): booléen i H(x.clé) // calculer l’adresse primaire Si TH[i].vide = faux alors Si TH[i].donnée = x alors retourner (vrai) Sinon Retourner (Rechercher_LLC(TH[i].lien, x)) Sinon retourner (faux)
  • 63. 63 3. Chaînage séparé :  L’insertion d’une donnée x se déroule comme suit: a. Calculer l’adresse primaire de x (soit i = h(x)) b. Si la case « i » est vide alors insérer la donné dans cette case. c. Sinon insertion (au début) dans la liste associée à cette case MÉTHODES DE RÉSOLUTION DE COLLISIONS
  • 64. 64 3. Chaînage séparé : Exercice 2 (Question 1.b) MÉTHODES DE RÉSOLUTION DE COLLISIONS Procédure insérer_TH_CS(Var TH: tableau de hachage, x: TQQ) i H(x.clé) // calculer l’adresse primaire Si TH[i].vide = vrai alors TH[i].donnée  x TH[i].Vide faux Sinon // insertion au debut de la liste Insérer_Debut_LLC(TH[i].Lien, x) FSI
  • 65. 65 3. Chaînage séparé :  La suppression d’une donnée x se déroule comme suit: a. Rechercher la donné x dans la table de hachage b. Si x se trouve dans son adresse primaire (la donnée de la case h(x)) alors i. Si la liste « lien » n'est pas vide alors déplacer le premier élément de la liste dans la case h(x) (en écrasant x) ii. Sinon vider la case h(x) c. Sinon (x se trouve en débordement dans une liste) alors la supprimer de cette liste MÉTHODES DE RÉSOLUTION DE COLLISIONS
  • 66. 66 3. Chaînage séparé : Exercice 2 (Question 1.b) MÉTHODES DE RÉSOLUTION DE COLLISIONS Procédure supprimer _TH_CS(Var TH: tableau de hachage, x: TQQ) Trouve Rechercher_TH_CS (TH, x); ih(x.clé) Si (trouve = vrai) alors Si TH[i].donné= x alors Si TH[i].Lien = Null alors TH[i].Vide vrai Sinon PTH[i].Lien TH[i].donnée  Valeur(P) TH[i].Lien suivant (P) Libérer (P) Sinon // supprimer x de la liste Supprimer_LLC(TH[i].Lien, x) FSI
  • 67. 67 4. Chaînage interne :  Les données en débordement (en cas de collisions) sont stockés dans la table (dans le même espace « adressable » par la fonction) en gardant le chaînage entre les synonymes MÉTHODES DE RÉSOLUTION DE COLLISIONS Indice Vide donné lien 0 F e -1 1 F b -1 2 F f 6 3 F c 4 4 F d -1 5 F a -1 6 V j 7 7 V k -1 8 F g -1 9 V -1  Le champ « lien » lie les données en cases primaires avec leurs synonymes en débordement.  La table est remplie quand le nombre d’éléments insérés égale à N-1  sacrifice d’une case vide
  • 68. 68 4. Chaînage interne :  Comme dans le chaînage séparée, la recherche d’une donnée x se déroule comme suit: a. Calculer l’adresse primaire de x (soit i = h(x)) b. Si la case « i » de table de hachage contient la donné x alors la recherche est terminée. c. Sinon continuer la recherche séquentielle dans la liste « lien » MÉTHODES DE RÉSOLUTION DE COLLISIONS
  • 69. 69 4. Chaînage interne :  Comme dans le chaînage séparée, la recherche d’une donnée x se déroule comme suit: a. Calculer l’adresse primaire de x (soit i = h(x)) b. Si la case « i » de table de hachage contient la donné x alors la recherche est terminée. c. Sinon continuer la recherche séquentielle dans la liste « lien » MÉTHODES DE RÉSOLUTION DE COLLISIONS
  • 70. 70 4. Chaînage interne :  L’insertion d’une donnée x se déroule comme suit: a. Calculer l’adresse primaire de x (soit i = h(x)) b. Si la case « i » est vide alors insérer la donné dans cette case. c. Sinon trouver une case vide, insérer la donnée dans cette case ensuite la chaine à la queue de liste de « i ». MÉTHODES DE RÉSOLUTION DE COLLISIONS
  • 71. 71 4. Chaînage interne :  La suppression d’une donnée x se déroule comme suit: a. Rechercher l’adresse i de la donné, ainsi que son prédécesseur k dans la liste. b. Rechercher le successeur de i (soit j) où h(j) = i [son adresse primaire égale à i] c. Si un tel successeur existe alors on le déplace vers i et on tente de vider son emplacement (ij) d. Sinon (il n'y a pas de problèmes avec les successeurs), on vide la case i en mettant à jour son prédécesseur j pour qu’il pointe le successeur immédiat de i MÉTHODES DE RÉSOLUTION DE COLLISIONS
  • 72. 72 4. Chaînage interne :  Les difficultés rencontrés dans cette méthode peuvent se résumer en deux points:  Insertion: rechercher la queue de la liste « i »  Suppression: garder le prédécesseur de « i » qui n’existe pas toujours (la première case n’a pas de prédécesseur)  La solution est d’utiliser une liste circulaire où la première case pointe la dernière case. MÉTHODES DE RÉSOLUTION DE COLLISIONS
  • 73. 73 4. Chaînage interne :  Si le champs « lien » égale à -1 cela indique que la liste est vide.  Sinon il indique l’indice de la case suivante MÉTHODES DE RÉSOLUTION DE COLLISIONS Indice Vide donné lien 0 F e -1 1 F b -1 2 F f 6 3 F c 4 4 F d 3 5 F a -1 6 V j 7 7 V k 2 8 F g -1 9 V -1 Indice Vide donné lien 0 F e -1 1 F b -1 2 F f 6 3 F c 4 4 F d -1 5 F a -1 6 V j 7 7 V k -1 8 F g -1 9 V -1
  • 74. 74 4. Chaînage interne : Exercice 2 (Question 1.a) MÉTHODES DE RÉSOLUTION DE COLLISIONS Type Tcase = Structure Donnée: TQQ Lien : entier initialisé à -1 Vide: booléen initialisé à vrai Fin Var TH: Tableau [0 .. N-1] de Tcase
  • 75. 75 4. Chaînage interne : Exercice 2 (Question 1.b) MÉTHODES DE RÉSOLUTION DE COLLISIONS Procédure rechercher_TH_CI(TH: tableau de hachage, x: TQQ): booléen i H(x.clé) // calculer l’adresse primaire Si TH[i].vide = faux alors Si TH[i].donnée = x alors retourner (vrai) Sinon jTH[i].lien TQ (j≠ -1) et (j ≠ i ) faire Si TH[j].donnée = x alors retourner (vrai) Sinon j  TH[i].lien Sinon retourner (faux)
  • 76. 76 3. Chaînage séparé : Exercice 2 (Question 1.b) MÉTHODES DE RÉSOLUTION DE COLLISIONS Procédure insérer_TH_CS(Var TH: tableau de hachage, x: TQQ) i H(x.clé) // calculer l’adresse primaire Si TH[i].vide = vrai alors TH[i].donnée  x TH[i].Vide faux Sinon // insertion au debut de la liste k  trouver_case_vide(TH) Si (k ≠ -1) alors TH[k].donnée  x TH[k].Vide faux Si TH[i].lien = -1 alors TH[k].lien  i ; Sinon TH[k].lien TH[i].lien; TH[i].lien k FSI
  • 77. 77 4. Chaînage interne :  La suppression d’une donnée x se déroule comme suit: a. Rechercher l’adresse i de la donné, ainsi que son prédécesseur k dans la liste. b. Rechercher le successeur de i (soit j) où h(j) = i [son adresse primaire égale à i] c. Si un tel successeur existe alors on le déplace vers i et on tente de vider son emplacement (ij) d. Sinon (il n'y a pas de problèmes avec les successeurs), on vide la case i en mettant à jour son prédécesseur j pour qu’il pointe le successeur immédiat de i MÉTHODES DE RÉSOLUTION DE COLLISIONS
  • 78. 78 4. Chaînage interne : Exercice 2 (Question 1.b) MÉTHODES DE RÉSOLUTION DE COLLISIONS Procédure supprimer _TH_CS(Var TH: tableau de hachage, x: TQQ) Trouve Rechercher_TH_CS (TH, x); ih(x.clé) Si (trouve = vrai) alors Si TH[i].Lien = -1 alors // cela implique TH[i].donné= x TH[i].Vide vrai Sinon // rechercher le prédécesseur k et le premier successeur j tel que h(j) = i Répéter lTH[i].Lien existe  faux TQ (l≠ i) faire Si ((h(TH[l].donné.clé) = i) et (non existe) alors jl; existe vrai k  l; l  TH[l].lien FTQ Si existe alors TH [i] TH[j]; ij Sinon ……
  • 79. 79 4. Chaînage interne : Exercice 2 (Question 1.b) MÉTHODES DE RÉSOLUTION DE COLLISIONS Sinon // rechercher le prédécesseur k et le premier successeur j tel que h(j) = i Répéter lTH[i].Lien existe  faux TQ (l≠ i) faire Si ((h(TH[l].donné.clé) = i) et (non existe) alors jl; existe vrai k  l; l  TH[l].lien FTQ Si existe alors TH [i] TH[j]; ij Sinon TH[i].vide vrai Si TH[i].lien = k alors TH[k].lien -1 Sinon TH[k].lien TH[i].lien Jusqu’à non existe FSI
  • 80. 80  La figure suivante résume les courbes des nombres moyens de tests pour une recherche par rapport au chargement de la table (M/N, M étant le nombre des éléments présents dans la table) pour les quatre méthodes présentées. MÉTHODES DE RÉSOLUTION DE COLLISIONS L : essai linéaire D : double hachage C : chaînage interne S : chaînage séparé
  • 81. 81  Comme la figure le montre, les méthodes de chaînage semblent les meilleures. Cependant, leur inconvénient réside dans le champ additionnel représentant les liens. MÉTHODES DE RÉSOLUTION DE COLLISIONS L : essai linéaire D : double hachage C : chaînage interne S : chaînage séparé
  • 82. 82  Pour l'essai linéaire par exemple, même quand la table est remplie à 90%, le nombre de tests est au voisinage de 5.  Pour avoir un temps rapide (de l'ordre de 1), on convient de ne pas dépasser un chargement de 70%. MÉTHODES DE RÉSOLUTION DE COLLISIONS L : essai linéaire D : double hachage C : chaînage interne S : chaînage séparé
  • 83. 83  Soit une table de N cases, et on aimerait insérer r données. Le pourcentage de remplissage (la densité) est donc: d = r / N  Soit P(x) la probabilité que x données parmi r soient « hachées » vers la même case  La fonction de Poisson en est une bonne approximation, en supposant une fonction de hachage uniforme ESTIMATION DES DÉBORDEMENTS
  • 84. 84  La fonction de Poisson en est une bonne approximation, en supposant une fonction de hachage uniforme  N*P(x) est donc une estimation du nombre de cases ayant été choisies x fois durant l'insertion des r données dans la table  Le nombre total de données en débordement est alors estimé à : ESTIMATION DES DÉBORDEMENTS
  • 85. 85  Exemple numérique:  Lors de l'insertion de 1000 données dans une table de 1000 cases (densité = 1), on estime que :  N.P(0) = 368 cases ne recevront aucune données  N.P(1) = 368 cases auront été choisies 1 seule fois  N.P(2) = 184 cases auront été choisies 2 fois  N.P(3) = 61 cases auront été choisies 3 fois  N.P(4) = 15 cases auront été choisies 4 fois  N.P(5) = 3 cases auront été choisies 5 fois  N.P(6) = 0 cases auront été choisies 6 fois ESTIMATION DES DÉBORDEMENTS
  • 86. 86  Exemple numérique:  Le nombre de données en débordement est proche de : 184 + 2*61 + 3*15 + 4*3 = 363 soit 36% des données contre 631 (368 + 184 + 61 + 15 + 3) données dans leurs adresses primaires  Pour une densité = 0.5, (ex r = 500 et N = 1000), on aurait eu 21% de données en débordement et 79% de données rangées dans leur adresse primaire. ESTIMATION DES DÉBORDEMENTS
  • 87. 87  Les méthodes de hachage donnent des résultats excellents en moyenne O(1), mais lamentables dans le pire cas O(n), car il n'est pas possible d'éviter les collisions.  En particulier, le choix de la fonction de hachage est fondamental.  Il existe plusieurs façons de réduire les collisions :  trouver une fonction de hachage qui distribue bien les données c'est a dire de façon aléatoire.  augmenter l'espace des adresses possibles.  mettre plus d'une donnée par adresse possible (si on accepte par exemple b données par adresse donc d = r/(b*N). CONCLUSION
  • 88. SOURCES DE CE COURS  N. EL-ALLIA , Cours d’Algorithmique et Structures de données dynamiques, Ecole nationale Supérieure d’Informatique (ESI), 2014.  Djamel Eddine ZEGOUR, Cours de Structures de Données, Ecole nationale Supérieure d’Informatique (ESI), Disponible sur http://zegour.esi.dz/Cours/Cours_sdd.htm  W. K. Hidouci, Cours Structures De Données et Fichiers, École nationale Supérieure d’Informatique, Disponible sur hidouci.esi.dz/algo/ 88