Vous êtes sur la page 1sur 95

Big Data

Hashage universel, filter de Bloom et ses extensions


IDSCC 5 ENSAO
A.KERKRI
Date
Introduction
 L’Internet est passé à des millions d'utilisateurs générant des
téraoctets de données chaque jour.
 Avec ce genre de croissance, l’accès à ces données sera impossible,
à moins que nous ne développions de nouvelles structures et de
nouveaux algorithmes pour stocker et accéder les données.
 Alors, quel est le problème avec les structures de données
traditionnelles comme les tableaux et les liens Listes (arrays)?

12/23/2021 2
Introduction
 Supposons que nous ayons un très grand ensemble de données
stockées dans un tableau.
 La durée requise pour rechercher un élément dans le tableau est
𝑂(𝑙𝑜𝑔2 (𝑛)) ou 𝑂(𝑛) selon que le tableau est trié ou non.
 Si le tableau est trié, une technique telle que la recherche binaire
peut être utilisé pour rechercher le tableau. Sinon, le tableau doit
être recherché linéairement. La tâche devient encore plus
compliquée, si nous devons traiter un ensemble de données très
volumineux.

12/23/2021 3
Introduction
Exemple (recherche en temps 𝑂(𝑙𝑜𝑔2 (𝑛))
Cherchons le nombre 13 dans cette liste des nombres :

12/23/2021 4
Introduction
 C'est pourquoi qu’on va aborder une nouvelle technique appelée
hachage qui nous permet de mettre à jour et de récupérer toute
entrée dans temps constant O(1). La performance à temps
constant ou O(1) signifie, la quantité de temps pour effectuer
l'opération ne dépend pas de la taille des données n.
 Le hachage joue un rôle central dans Big Data car il nous fournit
une représentation compacte des données.

12/23/2021 5
Introduction
 Principe du hashage : une fonction (appelée fonction de hachage)
compresse des blocs de données d'entrée de taille arbitraire et en
génère un identifiant de taille plus petite (et dans la plupart des
cas fixe), appelé la valeur de hachage ou simplement le hachage.
 L’idée derrière l’utilisation du hashage consiste à trouver une
fonction pour calculer un index afin qu'un objet puisse être stocké
à un emplacement précis dans une table (appelée table de
hashage) de telle sorte qu'il puisse être facilement trouvé.

12/23/2021 6
Introduction
 Exemple
Supposons que nous ayons un ensemble de chaînes :
{"abc", "def", "ghi"}
que nous aimerions stocker dans une table. Notre objectif ici est de
les trouver ou de les mettre à jour rapidement à partir de cette
table, en fait en O(1).

12/23/2021 7
Introduction
Les problèmes du hashing
 Dans l’exemple précédents, il existe une possibilité que les chaînes
s'écraserait au même colonne du table de hashage, créant ce que
nous appelons une « collision ». C'est évidemment pas une bonne
chose.
 Deuxièmement, nous devons trouver une bonne taille de table, de
préférence un nombre premier de sorte que même si les sommes
sont différentes, les collisions peuvent être évitées, lorsque nous
prenons mod de la somme pour trouver l'emplacement.

12/23/2021 8
Introduction
Types de fonctions de hashage
1. Fonctions cryptographiques
En pratique, les fonctions de hachage cryptographiques sont
définies comme des mappages fixes des chaînes de bits d'entrée
variables aux chaînes de bits de sortie de longueur fixe.
Comme indiqué précédemment, les collisions de hachage sont
inévitables, mais un hachage sécurisé doit être résistant aux
collisions. C'est pourquoi une telle classe de fonctions nécessite
toujours des preuves mathématiques

12/23/2021 9
Introduction
 Fonctions de hashage non cryptographique
Contrairement aux fonctions de hachage cryptographiques, les
fonctions non cryptographiques ne sont pas conçus pour repousser
les attaques visant à trouver une collision, par conséquent elles ne
nécessitent pas de sécurité ou de résistance élevée aux collisions.
De telles fonctions doivent simplement être rapides et garantir une
faible probabilité de collisions, permettant de hacher rapidement de
nombreuses données avec une probabilité faible d'erreur.

12/23/2021 10
Introduction
Nous posons donc deux questions.
 Question 1 : Comment choisir une bonne fonction de hachage ?
 Question 2 : Comment gérer les collisions ?

12/23/2021 11
Introduction
 Choisir une « bonne » fonction de hachage est essentiel pour
réussir la mise en œuvre d'une table de hachage.
 Ce que nous entendons par « bonne », c'est que la fonction doit
être facile à calculer et elle dopit éviter les collisions autant que
possible. Si la fonction est difficile à calculer, alors nous perdons le
avantage gagné pour les recherches en O(1).
 Même si on choisi une très bonne fonction de hachage, on devrait
faire face à « certaines » collisions.

12/23/2021 12
Principe général du hashage
Il est difficile de trouver une fonction de hachage « parfaite », c'est-
à-dire une fonction qui n'a pas de collisions. Mais nous pouvons
faire « mieux » en utilisant les fonctions de hachage comme suit:
Coût computationnel du calcul
Supposons que nous ayons besoin de stocker un dictionnaire dans
une table de hachage, le dictionnaire contient des chaines de
caractère S:
𝑆 = 𝑆1 𝑆2 . . 𝑆𝑛
Et 𝐻 une fonction de hashage, et 𝑝 est un nombre premier tels que :

𝐻 S1 S2 ..Sn = 𝑆1 + 𝑝𝑆2 + ⋯ + 𝑝𝑛−2 𝑆𝑛−1 + 𝑝𝑛−1 𝑆𝑛

12/23/2021 13
Principe général du hashage
 Évidemment, chaque chaîne conduira à un numéro unique, mais
quand on prend le nombre Mod la taille du table, il est encore
possible qu'on ait des collisions mais il peut y avoir moins de
collisions que lorsqu’on utilise une fonction de hachage naïve
comme la somme des catactères.

12/23/2021 14
Principe général du hashage
 Bien que la fonction précédente minimise les collisions, nous
devons toujours gérer le fait que cette fonction doit être facile à
calculer. Plutôt que de calculer directement ce qui précède , nous
pouvons réduire le nombre de calculs en réarrangeant les termes
comme suit:

𝐻 S1 S2 ..Sn = 𝑆1 + 𝑝(𝑆2 + ⋯ 𝑝(𝑆𝑛−2 + 𝑝(𝑆𝑛−1 + 𝑝𝑆𝑛 )). . )


Ce réarrangement des termes nous permet de calculer rapidement
une bonne valeur de hachage.

12/23/2021 15
Principe général du hashage
Exemple:
 Calculons le coût de hasher le mot contenant 10 lettres, par les
deux fonctions précédentes.

12/23/2021 16
Principe général du hashage
Éviter les collisions
Il existe plusieurs stratégies de résolution de collision. L'élément
clé dans le hachage consiste à trouver une fonction de hachage facile
à calculer. Cependant, les collisions ne peuvent pas être évités. On
va aborder trois stratégies de gestion des collisions, le sondage
linéaire, sondage quadratique et chaînage séparé.

12/23/2021 17
Principe général du hashage
 Sondage linéaire (linear probing)
Supposons qu'une valeur soit hachée dans une position déjà occupée.
La stratégie la plus simple est de rechercher la prochaine position
disponible pour placer l‘élément hashé.
Supposons que nous ayons un ensemble de codes de hashage
composés de {89, 18, 49, 58, 9} et nous devons les placer dans un
tableau de taille 10.
Le tableau suivant illustre ce processus.

12/23/2021 18
Principe général du hashage

12/23/2021 19
Principe général du hashage
 Problème du clustering dans le sondage linéaire
Un problème dans le sondage linéaire est que le clustering pourrait
se développer si de nombreux objets sont hachés dans des endroits
proches les uns des autres.
Si le processus de sondage linéaire prend longtemps en raison du
clustering, tout avantage obtenu par les recherches et les mises à
jour O (1) peut être perdu.

12/23/2021 20
Principe général du hashage
Une stratégie consiste à redimensionner la table, lorsque le facteur
de charge de la table dépasse 0,7.
Le facteur de charge du tableau est défini comme le nombre de
places occupées divisé par la taille du tableau.
L'image suivante montre une bonne distribution de clés avec peu de
clustering

12/23/2021 21
Principe général du hashage
 Sondage quadratique
Bien que le sondage linéaire soit un processus simple où il est facile
de calculer le prochain emplacement, le sondage linéaire conduit
également à un certain regroupement comme on a vu avant.
Par conséquent, nous définissons un nouveau processus de sondage
quadratique qui fournit une meilleure distribution des clés en cas de
collision.

12/23/2021 22
Principe général du hashage
En sondage quadratique, si
la valeur de hachage est K ,
l'emplacement suivant est
calculé en utilisant la
séquence K + 1, K + 4, K
+ 9 etc. Le tableau suivant
montre la résolution de
collision en utilisant le
sondage quadratique.

12/23/2021 23
Principe général du hashage
 Chainage séparé
(separate chaining)
L'idée du chainage séparé
est de résoudre une collision
en créant une liste liée
d'éléments comme indiqué
ci-dessous.

12/23/2021 24
Principe général du hashage
 Évidemment une bonne fonction de hachage est nécessaire pour
que les clés puissent être réparties uniformément. Parce que tout
une répartition inégale des clés neutralisera tout avantage tiré du
concept de hachage.
 Nous devons également noter que le chaînage séparé nécessite une
mémoire dynamique (à l'aide de pointeurs) qui peuvent ne pas être
disponibles dans certains langages de programmation.
 De plus, la manipulation d'une liste à l'aide de pointeurs est
généralement plus compliquée que l'utilisation d'un simple array.

12/23/2021 25
Hashage aléatoire
Introduction
 Pour trouver une fonction de hachage parfaite qui évite
complètement les collisions, il faut avoir une connaissance
complète de l'ensemble de données précis qui serait stocké dans
notre table de hachage.
 Malheureusement, pour la plupart des applications de hachage, on
ne sait pas à l'avance ce que l'utilisateur mettra dans le tableau.
Ainsi, il est impossible, même en principe, de concevoir à l'avance
une fonction de hachage parfaite.

12/23/2021 26
Hashage aléatoire
 Peu importe quelle fonction de hachage nous choisissons, les
éléments d’un un sous ensemble de U (appelé l’univers des
éléments) vont entrer en collision.
 Si nos données d'entrée proviennent d'un tel sous-ensemble, soit
par hasard, soit par intention malveillante, notre code s'arrêtera
brutalement.
 Il s'agit d'un véritable problème de sécurité avec les routeurs
Internet de base, par exemple; chaque routeur de la dorsale
Internet survit à des millions d'attaques par jour, y compris
attaques de synchronisation, d'agents malveillants.

12/23/2021 27
Hashage aléatoire
 La seule façon d'éviter ce comportement du pire des cas est de
choisir nos fonctions de hachage aléatoirement.
 Plus précisément, nous allons fixer un ensemble 𝐸 de fonctions
de 𝑈 𝑣𝑒𝑟𝑠 {0,1, … 𝑚 − 1}, et puis à l'exécution, nous choisissons
notre fonction de hachage au hasard dans l'ensemble 𝐸 selon une
répartition uniforme.

12/23/2021 28
Hashage aléatoire
Pas vraiment aléatoire ?
La plupart des analyses théoriques du hachage supposent des
fonctions de hachage aléatoires idéales.
Aléatoire idéal signifie que la fonction de hachage est choisie
uniformément au hasard dans l'ensemble de toutes les fonctions de
𝑈 𝑣𝑒𝑟𝑠 0,1, … 𝑚 − 1 .
Intuitivement, pour chaque nouvel élément 𝑥, on jette un dé à m
faces pour déterminer la valeur de hachage ℎ(𝑥). L'aléatoire idéal
est un modèle théorique propre, qui fournit les plus fort garanties
théoriques possibles.

12/23/2021 29
Hashage aléatoire
Malheureusement, les fonctions de hachage aléatoire idéales sont un
fantasme théorique, Au lieu de cela, on va considérer des familles de
fonctions de hachage avec juste assez d'aléatoire pour garantir de
bonnes performances.

12/23/2021 30
Hashage aléatoire
Uniformité des fonctions de hashage
Une propriété des fonctions de hachage aléatoire idéales qui semble
intuitivement utile est l'uniformité.
Une famille 𝐻 de fonctions de hachage est uniforme si l'on choisit
une fonction de hachage uniformément au hasard à partir de 𝐻 rend
chaque valeur de hachage également probable pour chaque élément
de l'univers 𝑈:
1
𝑃(ℎ 𝑥 = 𝑖)ℎ 𝜖 𝐻 = 𝑝𝑜𝑢𝑟 𝑡𝑜𝑢𝑡 𝑥 𝑒𝑡 𝑡𝑜𝑢𝑡 𝑖
𝑚

12/23/2021 31
Hashage aléatoire
 Remarque :
Nous soulignons que cette condition doit être vérifiée pour chaque
élément 𝑥 𝜖 𝑈 et chaque indice 𝑖.
En fait, malgré son attrait intuitif, l'uniformité n'est pas très
importante ou utile en soi. Exemple.

12/23/2021 32
Hashage aléatoire
Hashage universel
Un objectif beaucoup plus important est de minimiser le nombre de
collisions. Une famille de fonctions de hashage est universelle si,
pour deux éléments quelconques de l'univers 𝑈, la probabilité de
collision est aussi faible que possible :
1
𝑃(ℎ 𝑥 = ℎ(𝑦))ℎ 𝜖 𝐻 ≤ 𝑝𝑜𝑢𝑟 𝑡𝑜𝑢𝑡 𝑥 ≠ 𝑦
𝑚

12/23/2021 33
Hashage aléatoire

Définition
Une famille de fonction de hashage est semi-unierselle si :
2
𝑃(ℎ 𝑥 = ℎ(𝑦))ℎ 𝜖 𝐻 ≤ 𝑝𝑜𝑢𝑟 𝑡𝑜𝑢𝑡 𝑥 𝑦
𝑚

 Le chiffre 2 n'a rien de spécial dans cette définition ; toute autre


constante pourra le remplacer.

12/23/2021 34
Hashage aléatoire
 Exemple 1
Supposons qu’on dispose d’une liste des adresses IP sous forme :
(𝑥1 , 𝑥2 , 𝑥3 , 𝑥4 )
Avec : 𝑥𝑖 𝜖 0,255 .
Montrer que la fonction:
ℎ 𝑥1 , 𝑥2 , 𝑥3 , 𝑥4 = 𝑎1 𝑥1 + 𝑎2 𝑥2 + 𝑎3 𝑥3 + 𝑎4 𝑥4 𝑚𝑜𝑑 𝑚
Avec 𝑚 un premier tel que : 𝑛 > 255 et 𝑎𝑖 𝜖 0, 𝑚 − 1 est
universelle.

12/23/2021 35
Hashage aléatoire

Théorème

Si 𝐻 est universel, alors pour tout ensemble 𝑆 ⊆ 𝑈 de taille


𝑛, pour tout 𝑥 ∈ 𝑈, si on choisi ℎ au hasard de 𝐻, le
nombre moyen de collisions entre 𝑥 et d'autres éléments
𝑛
dans 𝑆 est au plus (M est la taille du table de hashage)
𝑀

12/23/2021 36
Hashage aléatoire
 Hashage universelle et tables chainées
L'une des méthodes les plus courantes pour résoudre les collisions
dans les tables de hachage est appelée chaînage. Dans une table de
hachage chaînée, chaque entrée 𝑇[𝑖] n'est pas simplement un
élément unique, mais plutôt (un pointeur vers) une liste chaînée de
tous les éléments qui hachent vers 𝑇[𝑖]. Soit l(𝑥) la longueur de la
liste 𝑇[ℎ(𝑥)]. Pour voir si un élément x est dans la table de hachage,
nous parcourons toute la liste 𝑇[ℎ(𝑥)].

12/23/2021 37
Hashage aléatoire

Théorème
Soit 𝑇 une table de hashage de 𝑚 éléments implémentée avec
chainage, et soit 𝐻 une famille de fonctions de hashage universelle.
Soit 𝑙(𝑥) la longueur de la liste 𝑇 ℎ 𝑥 . Le pire des cas de temps
requis pour rechercher x est 𝑂(1 + 𝑙(𝑥)) . Une borne supérieur de
𝑛
ce temps de recherche sera :
𝑚

12/23/2021 38
Construction d’une famille de fonctions
universelles de hashage
 La méthode matricielle
Supposons que les éléments de notre univers 𝑈 ont une longueur de u-
bits. Disons que la taille de la table : 𝑀 est une puissance de 2, donc une
valeur de hashage est de longueur b bits avec:
𝑀 = 2𝑏
Le principe de cette méthode matricielle est de choisir ℎ pour être une
matrice aléatoire de dimension 𝑏 × 𝑢 qui contient des 0 et des 1, et de
définir ℎ(𝑥) = ℎ𝑥, où nous faisons addition mod 2. Ces matrices sont
courtes et grasses.
Exemple

12/23/2021 39
Construction d’une famille de fonctions
universelles de hashage

Théorème
Pour la méthode matricielle précédente :
1
∀ 𝑥 ≠ 𝑦 𝑃ℎ ℎ 𝑥 = ℎ 𝑦 ≤𝑀= 𝑏
2

12/23/2021 40
Construction d’une famille de fonctions
universelles de hashage
 Hashage multiplicative premier
Pour tout nombre 𝑝 entier, 𝑎 𝜖 [𝑝]+ 𝑒𝑡 𝑏 𝜖 [𝑝], soit ℎ𝑎,𝑏 : 𝑈 ⟶ [𝑚] être la
fonction ℎ𝑎,𝑏 𝑥 = 𝑎𝑥 + 𝑏 𝑚𝑜𝑑 𝑝 𝑚𝑜𝑑 𝑚

et soit :
𝑀𝐵+ = {ℎ𝑎,𝑏 /𝑎 𝜖 [𝑝]+ 𝑒𝑡 𝑏 𝜖 [𝑝]}

l'ensemble de toutes les 𝑝(𝑝 − 1) telles fonctions. Une fonction de cette


famille est spécifiée par deux paramètres a et b.
12/23/2021 41
Construction d’une famille de fonctions
universelles de hashage

Théorème

𝑀𝐵+ est universelle

12/23/2021 42
Hashage parfait
Une fonction de hachage est parfaite pour un univers 𝑈 si elle ne
produit aucune collision ie toutes les recherches peuvent être
effectuées en 𝑂(1). Nous allons voir deux méthodes pour construire
des fonctions de hachage parfaites pour un ensemble données U.
1. Espace de taille 𝑂(𝑁 2 )
2. Espace de taille 𝑂(𝑁)

12/23/2021 43
Hashage parfait
 Espace de taille 𝑂(𝑁 2 )
Soit 𝐻 une famille de fonctions de hachage universel et 𝑀 = 𝑁 2 .
Ensuite, choisissons une fonctions ℎ au hasard de 𝐻, il y a plus de 50 %
de chances qu'il n‘y aura pas de collisions.

Théorème
Si ℎ est une fonction d’une famille de hachage universelle, et
si 𝑀 = 𝑁 2 (N étant le cardinal de l’univers 𝑈) alors :
1
𝑃ℎ𝜖𝐻 ∃ (𝑥, 𝑦) 𝑥 ≠ 𝑦 ∶ ℎ 𝑥 = ℎ 𝑦 ≤
2
12/23/2021 44
Hashage parfait
 Espace de taille 𝑂(𝑁)
La méthode est la suivante. Nous allons d'abord hacher dans une
table de taille 𝑁 en utilisant le hachage universel. On aura des
collisions avec une grande probabilité, cependant, nous allons
ensuite re-hacher chaque indice en utilisant la méthode précédente,
en équilibrant la taille de chaque valeurs pour obtenir zéro collision.

12/23/2021 45
Hashage parfait
Dans cette deuxième méthode nous avons une fonction de hachage
de premier niveau 𝒉 et une table de premier niveau A, puis 𝑁 de
fonctions de deuxième niveau de hachage ℎ1 , . . , ℎ𝑁 et 𝑁 tableaux de
second niveau 𝐴1 , . . , 𝐴𝑁 .
Pour rechercher un élément 𝑥, nous d'abord calculer 𝑖 = ℎ(𝑥) puis
trouver l'élément dans 𝐴𝑖 [ℎ𝑖 (𝑥)].

12/23/2021 46
Hashage parfait
Supposons que la fonction de hachage ℎ hache 𝑛𝑖 éléments de 𝑈 à
l'emplacement 𝑖 . Nous avons déjà argumenté (en analysant la
méthode 1) que nous pouvons trouver ℎ1 , . . , ℎ𝑁 de sorte que
l'espace total utilisé dans les tables secondaires soit 𝑖 𝑛𝑖2 .
Exemple
Soit l’univers 𝑈 = {18,41,22,32,44,59,79} et la fonction de hachage
du premier niveau : ℎ 𝑥 = 𝑥 𝑚𝑜𝑑 7.

12/23/2021 47
 Il reste à montrer que l'on peut trouver une fonction de premier
2
niveau ℎ telle que 𝑖 𝑖 = 𝑂(𝑁). En fait:
𝑛

Théorème
Si on choisit la fonction de hachage du premier niveau ℎ
d’une famille 𝐻 universelle alors:
1
𝑃ℎ𝜖𝐻 𝑛𝑖2 > 4𝑁 <
2
𝑖

12/23/2021 48
Filtre de Bloom
 Problème d’appartenance
Un problème d'appartenance à un ensemble de données consiste à
décider si un élément appartient ou non à l'ensemble de données.
Pour les petits ensembles, il pourrait être résolu par recherche
directe et comparaison ultérieure de l'élément donné à chaque
élément de l'ensemble.
Cependant, une approche aussi naïve dépend sur le nombre
d'éléments de l'ensemble et prend en moyenne O(log n), où n est le
nombre total d'éléments.

12/23/2021 49
Filtre de Bloom
Il est évident que pour des Big Data, cette approche n'est pas
efficace et demande trop le temps et de mémoire O(n) pour stocker
les éléments.

12/23/2021 50
Filtre de Bloom
 Exemple 1 : Problème de navigation sécurisée
Lors du développement d’un navigateur Web on a remarqué que
certaines URL contiennent des logiciels malveillants, nous voulons
donc alerter les utilisateurs s'ils essaient de naviguer vers ces pages.
Une solution immédiate, qui minimise le trafic réseau, consiste à
stocker touts ces URL dans l'application et une fois que l'utilisateur
a saisi l'URL, on vérifie s'il ne s'agit pas d'un logiciel malveillant et
peut être navigué en toute sécurité. Une implémentation aussi naïve
fonctionnera assez bien lorsque le volume des mauvaises URL sont
petites. Ce n'est malheureusement pas le cas pour le monde réel.

12/23/2021 51
Filtre de Bloom
Nous aurons donc besoin d'une structure spéciale qui peut stocker
de mauvais URL (ou, idéalement, seulement quelques informations
à leur sujet).

12/23/2021 52
Filtre de Bloom
 Exemple 2 : Séquences d'ADN
Un problème important dans les études métagénomiques, est la
classification des séquences: soit comme « nouvelles » ou appartenant
à un génome connu, en filtrant des données qui ont été récolté
auparavant.

12/23/2021 53
Filtre de Bloom
Dans cette partie, on va considérer des alternatives populaires
aux tables de hachage usuels, qui nécessitent moins d'espace,
effectuent des recherches plus rapides et maintiennent une faible
probabilité de collision.

De telles structures aident à gérer un grand volume de données et


permettre l'exécution de requêtes d‘appartenance avec bonne
performance. On commence avec le fameux filtre Bloom, puis on se
renseigne sur ses extensions et modifications.

12/23/2021 54
Filtre de Bloom
 Filtre de Bloom
La structure de données la plus simple et la plus connue qui résout
le problème d'appartenance est le filtre de Bloom qui a été proposé
par Burton Howard Bloom en 1970. C'est une structure
probabiliste efficace en espace, pour représenter un ensemble de
données D = {x1, x2, . . . , xn} de n éléments, qui ne prend en
charge que deux opérations :
• Ajout d'un élément dans l'ensemble.
• Tester si un élément est ou n'est pas membre de l'ensemble.

12/23/2021 55
Filtre de Bloom
Structure du filtre de Bloom
En pratique, le filtre Bloom est représenté par un array de bits et
peut être décrit par sa longueur m et le nombre de fonctions de
hachage {𝒉𝒊 }𝒌𝒊=𝟏 .
On suppose que m est proportionnel au nombre d'éléments n,
tandis que k est beaucoup plus petit que m.

12/23/2021 56
Filtre de Bloom
Les fonctions de hachage ℎ𝑖 doivent être indépendantes et
uniformément distribuées.
De cette façon, nous randomisons les valeurs de hachage
uniformément (l'utilisation des fonctions de hachage comme une
sorte de générateur de nombres aléatoires) dans le filtre ce qui
diminue la probabilité de collisions.

Une telle approche réduit considérablement l'espace de stockage,


quel que soit le nombre d'éléments de la structure de données
et leur taille, le filtre de bloom nécessite un nombre de bits constant
en réservant quelques bits pour chaque élément.

12/23/2021 57
Filtre de Bloom
La structure de données BloomFilter est un tableau de bits de
longueur m où au début, tous les bits sont égaux à zéro, ce qui
signifie que le filtre est vide.
Pour insérer un élément x dans le filtre, pour chaque fonction de
hachage ℎ𝑖 on calcule sa valeur 𝒋 = 𝒉𝒊 (𝒙) sur l'élément 𝑥 puis on
affecte la valeur 1 au bit numéro 𝑗.
Remarque, il est possible que certains bits puissent être définis
plusieurs fois en raison de collisions de hachage.

12/23/2021 58
Filtre de Bloom
 L’algorithme d’insertion dans un filtre de Bloom :

: Insertion d’un élément dans le filtre de Bloom


L’élément
Un filtre de Bloom à k fonctions :

12/23/2021 59
Filtre de Bloom
 Exemple
Considérons un filtre Bloom avec une longueur 𝑚 = 10 et deux
fonctions de hachage 32 𝑏𝑖𝑡𝑠 MurmurHash3 et FNV1a pour
produire des valeurs dans {0, 1, . . . , 𝑚 − 1} :
ℎ1 (𝑥):= 𝑀𝑢𝑟𝑚𝑢𝑟𝐻𝑎𝑠ℎ3(𝑥) 𝑚𝑜𝑑 m
ℎ2 (𝑥):= 𝐹𝑁𝑉1𝑎(𝑥) 𝑚𝑜𝑑 𝑚.

12/23/2021 60
Filtre de Bloom
Lorsque on veut tester si l'élément donné 𝑥 est dans le filtre, on
calcule toutes les 𝑘 fonctions de hachage {ℎ𝑖 (𝑥)} 𝑖 = 1, . . , 𝑘 et on
vérifie les bits dans les positions qui lui correspondent.
Si tous les bits sont mis à un, alors l'élément x peut exister dans
le filtre. Sinon, l'élément x n'est certainement pas dans le filtre.

12/23/2021 61
Filtre de Bloom
Tester si in élément est dans le filtre de Bloom
L’élément
Un filtre de Bloom à k fonctions :
Faux, si l’élément n’est pas trouvé et vrai si l’élément peut exister dans le filtre

12/23/2021 62
Filtre de Bloom
 Exemple
Considérons le filtre Bloom de l’exemple précédent avec deux
éléments indexés, Copenhague et Dublin :

12/23/2021 63
Filtre de Bloom
Remarques
 Si chaque fonction de hachage {ℎ𝑖 (𝑥)} 𝑖 = 1, . . , 𝑘 peut être calculée en un
temps constant (ce qui est vrai pour toutes les fonctions de hachage les plus
populaires), le temps d'ajouter un nouveau élément ou tester
l’appartenance d’un élément est une constante fixe O(1) et indépendant
de la longueur m du filtre et du nombre d'éléments dans le filtre.
 Les performances du filtre Bloom dépendent fortement des fonctions
de hachage. Une fonction de hachage avec une bonne uniformité réduira
pratiquement le taux de faux positifs observé. En revanche, plus le calcul est
rapide de chaque fonction de hachage, plus le temps global de chaque
opération est petit, et il est donc recommandé d'éviter les fonctions de
hachage cryptographique.
12/23/2021 64
Filtre de Bloom

Théorème
Supposons qu’on veut hacher 𝑛 éléments dans un filtre de Bloom
de longueur 𝑚, ayant 𝑘 fonctions de hachage, la probabilité d’avoir
un faux positif lors de la recherche d’un éléments est :
1−𝑝 𝑘
1 𝑘𝑛
Avec 𝑝 = (1 − )
𝑚

12/23/2021 65
Filtre de Bloom
Remarques
 Une valeur optimal du nombre des fonctions de hachage dans un
filtre de Bloom qui minimise la probabilité des faux positifs est :

l𝑛 2 𝑚
𝑘=
𝑛
Quelle est la valeur de la probabilité optimale des faux positifs dans
ce cas ?
Pour maintenir une probabilité des faux positif égale à 1%, quelle la
𝑚
valeur de et de 𝑘 qu’on doit choisir ?
𝑛

12/23/2021 66
Filtre de Bloom
Exemple (mémoire requise)
Supposons qu’on a un univers contenant 1 milliards éléments, on
utilise un filtre de Bloom pour hacher touts les éléments de cet
univers, et on veut garder une probabilité des faux positifs égale à
2%, quelle est la quantité de mémoire requise pour ce faire ?

12/23/2021 67
Filtre de Bloom
Suppression d’un éléments dans un filtre de Bloom
 La suppression n'est pas possible. Malheureusement, un seul bit peut
correspondre à plusieurs éléments en raison de collisions de hachage et
de bits partagés entre les éléments.
 Un certain nombre d'extensions ont été développées pour prendre en
charge la suppression des éléments, mais ils coûtent toujours par
l'espace et la vitesse. C'est pourquoi le filtre Bloom classique est si
rapide et peu encombrant.
 Heureusement, le support de suppression manquant n'est pas un
problème pour beaucoup applications du monde réel, mais si c’est
vraiment nécessaire, on doit opter pour modifications du filtre de
Bloom, par exemple le filtre de comptage de Bloom.

12/23/2021 68
Filtre de Bloom
 Filtre de Bloom avec comptage (CountingBloomFilter)
L'extension la plus populaire du filtre de Bloom classique qui
prend en charge la suppression est le filtre de Bloom avec comptage,
proposé en 2000, ce filtre est basé sur l'algorithme du filtre de
Bloom
𝑚
classique, il introduit un tableau de 𝒎 compteurs
𝐶𝑗 correspondant à chaque bit du tableau du filtre.
𝑗=1
L’insertion d’un nouvel élément dans CountingBloomFilter,
commence par le calcul de ses positions binaires correspondantes,
puis pour chaque position on incrémente le compteur associé
(initialisé par 0) et, seulement s'il passe de zéro à un, on modifie le
bit dans le filtre, similaire à l'étape de l'algorithme classique.

12/23/2021 69
Filtre de Bloom
 L’algorithme de filtre de Bloom avec comptage :
L’ajout d’un éléments dans un filtre de Bloom avec comptage

Un filtre de Bloom avec Comptage à m compteurs et 𝑘 fonctions de hachage

Puis

12/23/2021 70
Filtre de Bloom
 Exemple (ajout )
 Tester si un élément appartient au filtre
L'opération de test est exactement la même que pour le Bloom
classique, puisque nous n'avons pas du tout besoin de vérifier les
compteurs. Le temps nécessaire pour tester un élément est
comparable à l'algorithme classique car les tableaux de bits des
filtres sont les mêmes.

12/23/2021 71
Filtre de Bloom
 Suppression d’un élément
La suppression est assez similaire à l'insertion mais à l'envers.
Supprimer un élément 𝑥, nous calculons toutes les valeurs de
hachage par : {ℎ𝑖 (𝑥)} 𝑖 = 1, . . , 𝑘 et diminuons les compteurs
correspondants. Si le compteur change sa valeur de un à zéro, le bit
correspondant dans le tableau binaire doit être désactivé.

12/23/2021 72
Filtre de Bloom
 Algorithme de suppression d’un élément d’un filtre de Bloom avec comptage
Suppression d’un élément du filtre de Bloom avec comptage

Un filtre de Bloom avec Comptage à m compteurs : et 𝑘 fonctions de hachage

Puis

12/23/2021 73
Filtre de Bloom
 Exemple (de suppression)
 Remarque
L'algorithme présuppose que l'élément x existe (ou peut exister)
dans le filtre, il est donc nécessaire de tester les éléments avant de
diminuer les compteurs correspondants.

12/23/2021 74
Filtre de Bloom
 Propriétés du filtre de Bloom avec comptage
Le filtre de comptage possède toutes les propriétés du filtre
classique, y compris la probabilité des faux positifs et le choix
optimal des paramètres du filtre.
Naturellement, les filtres de Bloom avec comptage sont beaucoup
plus volumineux que le filtre classique car de la mémoire
supplémentaire doit être allouée aux compteurs même si la plupart
sont des zéros. Il est donc important d'estimer la taille maximale
que peut prendre un compteur.

12/23/2021 75
Filtre de Bloom

Propriété
En supposant que chaque compteur C a un niveau de capacité N, la probabilité que
la valeur de C dépasse ce niveau de capacité (appelé probabilité de Overflow) dans
un filtre de Bloom avec comptage de longueur m avec le choix optimal de k de la
relation est :
𝑁
𝑒𝑙𝑛(2)
𝑝(max(𝐶) ≥ 𝑁) ≤ 𝑚
𝑁

12/23/2021 76
Filtre de Bloom
Remarques
 Pour éviter un overflow (c'est-à-dire incrémenter un compteur qui
est déjà à la valeur maximale), chaque compteur du tableau doit
être suffisamment grand pour conserver les propriétés des filtres
de Bloom. Dans la pratique, le compteur se compose de 4 bits
ou plus et d‘où un filtre de Bloom avec comptage nécessite donc 5
fois plus d'espace qu'un filtre de Bloom classique.
 Les filtres de Bloom avec comptage sont largement utilisés par
Apache Hadoop dans les applications MapReduce pour accélérer
le traitement d'énormes ensembles de données sur de grands
clusters.
12/23/2021 77
Filtres quotient
Lorsque le filtre de Bloom classique et ses modifications ne
rentrent pas dans la mémoire principale, ils sont totalement
hostiles au stockage en raison des exigences de plusieurs accès
aléatoires pour toute opération.
Une des structures de données qui prennent en charge les
opérations de base des filtres de Bloom, mais avec une meilleure
localisation des données et, est le filtre Quotient, présenté par
Michael Bender et al. en 2011.

12/23/2021 78
Filtres quotient
Le filtre atteint des performances comparables en termes d'espace
et de temps, mais prend également en charge les suppressions et
peut être redimensionné dynamiquement ou fusionné. Le nom de
cette structure de données provient d'une arithmétique quotient
résultant de l'opération de division.
Le filtre Quotient représente un ensemble de données 𝑈 par stocker
une empreinte digitale à p-bit pour chacun d'eux et ne nécessite
qu'une seul fonction de hachage pour générer de telles
empreintes digitales. Afin de garder la propriété aléatoire, la
fonction de hachage doit générer uniformément des empreintes
digitales distribuées indépendamment.

12/23/2021 79
Filtres quotient
 Chaque empreinte f dans l'algorithme est partitionnée en q les
plus significatifs bits (le quotient) et r bits les moins significatifs
(le reste) en utilisant la technique du quotient.

Technique du quotient
Empreinte
Quotient Et le reste

12/23/2021 80
Filtres quotient
 Pratiquement, pour améliorer la localité spatiale, les données du
filtre quotient sont représentées par une table de hachage
compacte avec 𝐦 = 𝟐𝒒 où le reste 𝑓𝑟 est stocké dans une case
indexée par le quotient 𝑓𝑞 . Les collisions possibles sont résolues
par le sondage linéaire.

12/23/2021 81
Filtres quotient
Chaque case de la table de hachage (bucket) contient trois bits de
métadonnées, tous égux à 0 au début:
is_occupied, is_continuation et is_shifted ceux-ci jouent un rôle
important dans la navigation de la structure des données.
 est_occupé: est défini lorsque le bucket j est le bucket canonique
(fq = j) pour une empreinte f stockée quelque part dans le filtre.
 est_continué : est défini lorsque le bucket est occupé, mais pas
par le premier des restes qui appartiennent au même seau.
 est_décalé : est défini lorsque le reste dans le bucket n'est pas
dans son bucket originale.

12/23/2021 82
Filtres quotient
 Un bucket dans le filtre de quotient :

est_occupé est_continué est_décalé

12/23/2021 83
Filtres quotient
 Lorsque nous voulons insérer un nouvel élément dans filtre de quotient, on
calcule d'abord son quotient et son reste. Si le bucket pour l'élément
n'est pas occupé, il peut être immédiatement inséré. Sinon, avant
l'insertion, il est nécessaire de trouver un bucket en utilisant le sondage
linéaire. Une fois le bucket correct trouvé, l'insertion de 𝑓𝑟 à la séquence
des éléments déjà stockés est effectué, ainsi que la mise à jour des bits de
métadonnées correspondants.
 La séquence d'une ou plusieurs buckets consécutives sans vides entre les eux
est appelé un cluster. Tous les clusters sont immédiatement précédés par
un bucket vide et le bit est_décalé de sa première valeur n'est jamais égal
à 1.

12/23/2021 84
Filtres quotient
 Exemple 1 (insertion dans un filtre quotient à 9 buckets)

12/23/2021 85
Filtres quotient
 Exemple 2 (insertion avec décalage)
Considérez un filtre Quotient avec des empreintes digitales
produites par la version 32 bits de la fonction de hachage
MurmurHash3 :
h(x) := MurmurHash3(x)

Pour le hachage, nous réservons q = 3 bits, d'où la taille du filtre est


𝑚 = 23 = 8, et le reste 29 bits que nous stockons dans les buckets
choisis.

12/23/2021 86
 Après avoir inséré toutes les chaines de caractères le filtre de
quotient sera :

12/23/2021 87
Filtres quotient
 Tester si un éléments existe dans le filtre de quotient
Le test des éléments peut être effectué de la même manière que
l'insertion. Nous vérifions si le bucket original de l'élément testé a
au moins un reste associé quelque part dans le filtre en observant le
bit est_occupé. Si le bit n'est pas défini, nous pouvons conclure que
l'élément n'est certainement pas dans le filtre. Sinon, nous scannons
le filtre pour le bucket en question. Ensuite, au sein de cette
exécution, nous comparons les restes stockés avec le reste de
l'élément testé en tenant compte du fait qu'ils sont tous triés. Si un
tel reste est trouvé, nous pouvons signaler quel élément peut exister
dans le filtre.

12/23/2021 88
Filtres quotient
 Exemple : testons si le mot Paris est dans ce filtre :

12/23/2021 89
Filtres quotient
 Propriétés des filtres quotients :
Des faux positifs sont possibles. La structure de données du filtre de
quotient est une représentation compacte d'un multi-ensemble
d'empreintes digitales, et son taux des faux positifs dépend de la
fonction de hachage 𝒉 et du nombre des éléments 𝒏 ajoutés dans le
filtre.
De plus, deux éléments différents pourraient avoir les mêmes
valeurs pour les deux: le reste et le quotient, c'est ce qu'on appelle
une collision dure. En raison de tels événements extrêmement rares, il
est possible que des réponses faussement positives.

12/23/2021 90
Filtres quotient
Leur probabilité des faux positifs est majorée par La formule :

La formule ci-dessus montre que, sous un nombre fixe des éléments


n, il y a un compromis entre la probabilité de faux positifs et la
longueur de l'empreinte p.
Semblable à d'autres tables de hachage, le facteur de charge est
très important dans le filtre Quotient, en allouant au moins
autant de buckets que le nombre moyen des éléments, ce qui signifie
que nous choisissons le nombre de Buckets 𝑚 comme :

12/23/2021 91
Filtres quotient
 La longueur du reste r peut être calculée à partir de :

12/23/2021 92
Filtres quotient
 Exemple (mémoire requise)
On veut hacher un milliard des éléments dans un filtre quotient:
1. combien de bit aura la fonction de hachage qu’on va utiliser ?
2. Calculer la valeur du reste pour qu’on aie une probabilité
positive de 2%.

12/23/2021 93
Filtres quotient
 Les faux négatifs ne sont pas possibles. Identiquement aux autres
données structures de ce chapitre, si le filtre Quotient trouve
qu'un élément n'est pas un membre, alors ce n'est certainement
pas un membre de l'ensemble.

12/23/2021 94
Filtres quotient
Comparaison entre le filtre de quotient et le filtre de Bloom
 Le filtre Quotient occupe plus de mémoire que le filtre
Bloom, mais il est plus rapide car chaque accès ne nécessite
d'évaluer qu'une seule fonction de hachage.
 Les résultats des comparaisons de performances en RAM
montrent que le filtre de quotient peut gérer 2,4 millions
d'insertions par seconde tandis que les filtres Bloom sont
limité à environ 0,69 million. Cependant, avec les tests pour les
éléments, ils sont presque au même niveau d'environ 2 millions
par seconde.

12/23/2021 95

Vous aimerez peut-être aussi