赞
踩
bloom filter 是空间效率极高的概率型算法和数据结构。用于判断一个元素是否存在一个集合(hashset)。
对于一个元素检测是否存在的调用,BloomFilter会告诉调用者两个结果之一:可能存在或者一定不存在。
应用场景:
优势
缺点
常规数据结构,hashmap,set,bit array也可用于检测一个元素是否存在,那使用boolmfilter 有什么优势呢?
hash map, 本质是指针,一个指针的大小是sizeof(void*),64bit的系统上是64个bit。如果需要用开链法解决冲突的话,又需要额外的指针,但是boolmfilter 在允许1%的误判情况下,每个元素只需要10bit的存储空间。整体来讲,节约了15%的存储空间。(sizeof(void)的含义就是获取一个指针的大小。指针的本质就是内存地址,因此指针的大小和内存空间有关。32位的机器内存空间是2G(windows系统),换算出来,凑个整数那就是32bit。因此本质上说,sizeof(void*)和编译器目标平台的内存空间有关*)
set, 如果采用hashmap实现,同上; 如果采用平衡树的方式,一个节点需要一个指针存储数据位置,两个指针指向其子节点,因此开销比hashmap更多
bit array, 对于判断某个数据是否存在,先对元素做hash,取模定位到具体的bit,如果该bit为1,则返回元素存在,如果该bit为0,则返回此元素不存在。可以看出,在返回元素存在的时候,也是会有误判的,如果要获得和BloomFilter相同的误判率,则需要比BloomFilter更大的存储空间
对于常规数据结构,boolmfilter缺点:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。