#布隆过滤器 #bloom #过滤器

bloom_filter_simple

一个简单且通用的布隆过滤器实现

1 个不稳定版本

0.1.0 2020 年 12 月 7 日

#1307 in 算法

自定义许可证

54KB
593

bloom_filter_simple

Crate API

bloom_filter_simple 是一个库,提供了不同类型的数据结构过滤元素的实现。这种数据结构基于 Burton Howard Bloom 提出的想法,因此被称为布隆过滤器

Burton H. Bloom. 1970. 在允许错误的情况下,哈希编码的空间/时间权衡。ACM通讯 13, 7 (1970 年 7 月),422–426. DOI: https://doi.org/10.1145/362686.362692

基本描述来自 维基百科

布隆过滤器是一种空间高效的概率数据结构,由 Burton Howard Bloom 在 1970 年提出,用于测试一个元素是否是集合的成员。可能存在误报,但不会出现漏报——换句话说,查询结果要么是“可能在集合中”,要么是“肯定不在集合中”。可以添加元素到集合中,但不能从中删除(尽管可以通过计数布隆过滤器变种来解决这个问题);添加的元素越多,误报的概率就越大。(“布隆过滤器”。定义,第 1 段。在维基百科中检索,2020 年 12 月 2 日,来自 https://en.wikipedia.org/wiki/Bloom_filter

布隆过滤器实现

该库提供了两种基本的布隆过滤器实现类型:KMBloomFilterSeededBloomFilter。前者使用两个哈希函数,而后者仅使用一个哈希函数,但使用不同的种子生成不同的哈希值。

示例

下面是一些如何初始化和使用不同布隆过滤器类型的简单示例。

默认布隆过滤器

DefaultBloomFilter 的目的是易于入门。它是一个预配置的 KMBloomFilter,使用两个哈希函数,这些函数在我们的测试中已证明是足够的。

use bloom_filter_simple::{BloomFilter,DefaultBloomFilter};

fn main() {
    // We plan on storing at most 10 elements
    let desired_capacity = 10;

    // The chance of a false positive increases with each inserted element. This parameter
    // specifies that it should be less than 0.01% (0.0001) when the desired capacity has
    // been reached.
    // In other words, the chance that the bloom filter returns true when checking whether a
    // novel element has been inserted before is less than 0.01% (0.0001).
    let desired_fp_probability = 0.0001;

    let mut filter = DefaultBloomFilter::new(desired_capacity, desired_fp_probability);

    // You can insert any type implementing the Hash trait. The bloom filter does not store the
    // inserted elements but only their hashes. Hence, there is no transfer of ownership required.
    filter.insert(&5i32);
    filter.insert(&"Some text");
    filter.insert(&10_000usize);

    // You can check whether a value has been inserted into the filter before.
    assert_eq!(false, filter.contains(&3));
    assert_eq!(true, filter.contains(&5));
    assert_eq!(true, filter.contains(&"Some text"));
}

KMBloomFilter

KMBloomFilter 允许您选择要使用的哈希函数。

KMBloomFilter<AHasher, DefaultHasher> = KMBloomFilter::new(desired_capacity, desired_fp_probability);

SeededBloomFilter

SeededBloomFilter 无需配置,因为它使用仅一个特定的哈希函数,该函数会自动播种。

SeededBloomFilter::new(desired_capacity, desired_fp_probability);

更多

有关更多示例和详细信息,请参阅 文档

依赖关系

~1MB
~13K SLoC