如果要索引的样本数量巨大,全部放在 hash 表里,在内存中肯定放不下.
因此采用一种概率的方式,用一个短一些的串来记录,把所有的key 分别通过一组 hash 函数,来映射到串上,标记为1(初始都为0),这样就建立了一个可供检索的filter。 查询某个给定值是否存在时,让他通过所有的hash函数,找到串上对应的位置,如果对应位置上都标记为 1,则这个值“可能”存在,如果有一个位标记不为1,则这个值“肯定”不存在。
参考: http://www.chmhome.com/technology/program-design/perl/20070527/13588.htm…
http://www.perl.com/2004/04/08/examples/Filter.pm
perl中有 Bloom::Filter 的模块 使用示例:
1 #!/usr/bin/perl -w
2
3 use strict;
4 use Bloom::Filter;
5
6 my $bf = Bloom::Filter->new( capacity => 10, error_rate => .001 );
7 my @keys = ("albert", "lee", "python", "perl", "ruby", "rebol", "java","C++");
8 $bf->add( @keys );
9
10 while ( <> ) {
11 chomp;
12 print "Found $_\n" if $bf->check( $_ );
13 }
14


