Bloom Filter and Counting Bloom Filter

来源:互联网 发布:苹果授权网络经销商 编辑:程序博客网 时间:2024/05/21 14:46

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增加了删除操作。

评价:

    用Bloom filter进行相似数据检测,可以弥补shingle中应用特征集交集计算文件相似性所导致的高计算和存储空间开销,在性能与相似性匹配精度之间取得平衡。对每一个shingle,分别应用Bloom Filter,这样,两个文件相似性计算就转换成两个Bloom Filter的相似性计算,越相似的文件在它们的Bloom filter中有更多共同的1。由于Bloom filter具有有限的误识别率的特性,相似性算法精确度取决于Bloom Filter的大小,越大则精确度越高,同时存储空间消耗也越大。

原创粉丝点击