Programme en JavaScript pour Tester un Filtre de Bloom
Conditions d’achèvement
Voici un programme complet en JavaScript qui permet de tester l'utilisation d'un filtre de Bloom. Ce programme inclut l'implémentation du filtre de Bloom, l'ajout de VIP, et la vérification de leur présence.
Implémentation du Filtre de Bloom
Code :
class BloomFilter {
// Constructeur pour initialiser la taille du filtre et le nombre de fonctions de hachage
constructor(size, numHashes) {
this.size = size; // Taille du tableau de bits
this.numHashes = numHashes; // Nombre de fonctions de hachage
this.bitArray = new Array(size).fill(0); // Initialisation du tableau de bits à 0
}
// Fonction de hachage privée, utilise un seed pour générer des indices différents
_hash(item, seed) {
let hash = 0;
for (let i = 0; i < item.length; i++) {
hash = (hash * seed + item.charCodeAt(i)) % this.size;
}
return hash; // Retourne l'index généré par le hash
}
// Méthode pour ajouter un élément au filtre
add(item) {
for (let i = 0; i < this.numHashes; i++) {
const index = this._hash(item, i + 1); // Génère l'index avec la fonction de hachage
this.bitArray[index] = 1; // Met le bit à 1
}
}
// Méthode pour vérifier si un élément est présent dans le filtre
contains(item) {
for (let i = 0; i < this.numHashes; i++) {
const index = this._hash(item, i + 1); // Génère l'index avec la fonction de hachage
if (this.bitArray[index] === 0) {
return false; // Si un bit est à 0, l'élément n'est pas présent
}
}
return true; // Si tous les bits sont à 1, l'élément est probablement présent
}
}
// Création d'un filtre de Bloom avec une taille de 1000 bits et 3 fonctions de hachage
const bloomFilter = new BloomFilter(1000, 3);
// Ajout de VIP au filtre de Bloom
bloomFilter.add("Alice");
bloomFilter.add("Bob");
// Vérification des VIP
console.log("Alice est un VIP :", bloomFilter.contains("Alice")); // Output: true
console.log("Bob est un VIP :", bloomFilter.contains("Bob")); // Output: true
console.log("Charlie est un VIP :", bloomFilter.contains("Charlie")); // Output: false (ou true en cas de faux positif)
// Test avec d'autres noms
bloomFilter.add("Charlie");
console.log("Charlie est un VIP :", bloomFilter.contains("Charlie")); // Output: true
console.log("Dave est un VIP :", bloomFilter.contains("Dave")); // Output: false (ou true en cas de faux positif)
Étapes du Programme
-
Création du Filtre de Bloom :
- Initialisation du filtre de Bloom avec une taille de 1000 bits et 3 fonctions de hachage.
- Tableau de bits initialisé à zéro.
-
Ajout de VIP :
- Ajout des noms "Alice" et "Bob" au filtre de Bloom.
- Utilisation des fonctions de hachage pour déterminer les indices dans le tableau de bits et mise à jour des bits correspondants.
-
Vérification des VIP :
- Vérification de la présence des noms "Alice", "Bob", et "Charlie".
- Utilisation des fonctions de hachage pour vérifier si les bits correspondants sont tous à 1.
-
Test avec d'autres noms :
- Ajout du nom "Charlie" et vérification de sa présence.
- Vérification de la présence du nom "Dave".
Conclusion
Le programme en JavaScript ci-dessus permet de tester l'utilisation d'un filtre de Bloom pour vérifier l'appartenance de VIP à un ensemble. Il démontre comment les filtres de Bloom peuvent être utilisés pour des vérifications rapides et efficaces tout en utilisant une quantité minimale de mémoire.
Modifié le: lundi 3 juin 2024, 04:48