1.bloom filter
Bloom Filter可能会产生误判(即可能会错误地认为一个元素存在于集合中,但实际上并不存在),但它不会产生漏判(即如果Bloom Filter认为一个元素不存在于集合中,那么这个元素确实不存在)。
Bloom Filter由一个位数组和一组哈希函数组成。
当一个元素被添加到Bloom Filter中时,它会被多个哈希函数映射到位数组中的多个位置,这些位置的值会被设置为1。
当查询一个元素是否存在于Bloom Filter中时,它同样会被多个哈希函数映射到位数组中的多个位置,如果所有这些位置的值都是1,那么Bloom Filter会认为这个元素存在于集合中;否则,它会认为这个元素不存在于集合中。
无偏hash函数就是能把元素的hash值计算的比较均匀的hash函数,能使得计算后的元素下标比较均匀的映射到位数组中。
布隆过滤器提供了两个参数,分别是预计加入元素的大小n,运行的错误率f。
- 错误率越低,位数组越长,控件占用较大
- 错误率越低,无偏hash函数越多,计算耗时较长
2.bit map
Bitmap由一个位数组组成,每个位可以表示一个二进制值(0或1)。通过将集合中的元素映射到位数组中的位,可以实现高效的集合操作和位运算。例如,可以使用Bitmap来表示一个集合,其中每个位表示集合中的一个元素是否存在。