Bloom Filter: More than duplicated detection applications
Bloom Filter应该算是从Hash思想继承出的一种数据结构。Bloom Filter可以说一个重要的randomized structure,不仅仅在网页去重中有应用,在其他很多地方也有。而且运用技巧后的Bloom Filter用处更加广泛。应用方面比如:1. Collaborating in overlay and peer-to-peer networks: Bloom lters can be used for summarizing content to aid collaborations in overlay and peer-to-peer networks.
2. Resource routing: Bloom lters allow probabilistic algorithms for locating resources.
3. Packet routing: Bloom lters provide a means to speed up or simplify packet routing protocols.
4. Measurement: Bloom lters provide a useful tool for measurement infrastructures used to create data summaries in routers or other network devices.
传统的哈希方法不会发生错误,而且存储的元素还可以复原。如果哈希函数选择得当,碰撞出现的情况比较少,那么查找某一个元素也很快。但是,如果你哈希某个集合只是为了判断某个元素是否在这个集合中,那么你会发现好像存储整个集合有点浪费。按传统的哈希方法判断某个元素是否属于集合时,会把这个元素和它映射位置上的元素进行匹配,如果完全匹配则说明属于集合,如果不匹配则不属于。在绝大部分查找都不能匹配的情况下(这常常是实际中的情况),我们会发现匹配的过程经常用不到整个元素,因为元素的一部分就可以判断不匹配了。基于“部分信息就能判断不匹配”这个思路,Burton Bloom(Bloom Filter的发明者)提出了一种改进的方法。
Bloom Filter
基本思想可以概括为:“正确率换空间”。与Simhash算法本质相似,Bloom filter算法的核心思想也是着眼于文件特征的降维,它使用Bloom filter数据结构来表示特征值。Bloom filter是一个空间效率很高的数据结构,它由一个位数组和一组hash映射函数组成。Bloom filter可以用于检索一个元素是否在一个集合中,它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。
Counting Bloom Filter
在所要表达的集合是静态集合的时候,标准Bloom Filter可以很好地工作,但是如果要表达的集合经常变动,标准Bloom Filter的弊端就显现出来了,因为它不支持删除操作。Counting Bloom Filter的出现解决了这个问题,它将标准Bloom Filter位数组的每一位扩展为一个小的计数器(Counter),在插入元素时给对应的k(k为哈希函数个数)个Counter的值分别加1,删除元素时给对应的k个Counter的值分别减1。Counting Bloom Filter通过多占用几倍的存储空间的代价,给Bloom Filter增加了删除操作。