Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/srinivasreddy/rust-bloomfilter

🦀 Bloom filter implementation in Rust 🦀
https://github.com/srinivasreddy/rust-bloomfilter

bloom-filter probabilistic-data-structures rust

Last synced: 2 months ago
JSON representation

🦀 Bloom filter implementation in Rust 🦀

Awesome Lists containing this project

README

        

## rust-bloomfilter

Bloom filters are defined by 4 interdependent values:

* n - Number of items in the filter
* p - Probability of false positives, float between 0 and 1 or a number indicating 1-in-p
* m - Number of bits in the filter
* k - Number of hash functions

## Guide for selecting the parameters
The values are interdependent as shown in the following calculations:

```
m = ceil((n * log(p)) / log(1.0 / (pow(2.0, log(2.0)))));

k = round(log(2.0) * m / n);
```
## Design
I use murmur3 hash to generate 128 bit hash integer, and then i split it into two integers of 64 bits each.
Following is the pseudo-code written for the design of bloom filter.

````
let hash_128 = murmur3_hash(data);
let first_64 = (hash_128 & (2_u128.pow(64) - 1));
let second_64 = hash >> 64;
for i 0..num_of_hashfuncs{
first_64 += i* second_64;
index = fist_64 % number_of_bits
self.bitvec.set(index, true);
}
````
## Usage
````rust
extern crate rust_bloomfilter;

use rust_bloomfilter::BloomFilter;

let mut b = BloomFilter(20000, 0.01, true);
b.add("Helloworld");
assert!(b.contains("Helloworld"));

````