介绍
小编给大家分享一下python使用布隆过滤器的案例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!
<强>使用库pybloom_live 强>
从pybloom_live进口ScalableBloomFilter BloomFilter #可自动伸缩的布隆过滤器 布鲁姆=ScalableBloomFilter (initial_capacity=100, error_rate=0.001) #添加内容 bloom.add(& # 39;大旗# 39;) 打印(& # 39;大旗# 39;盛开) #定长的布隆过滤器 bloom1=BloomFilter(能力=10000) bloom1.add(& # 39;大旗# 39;) 打印(& # 39;大旗# 39;bloom1)
<强>手动实现一个简单的布隆过滤器强>
使用bitarray实现,将初始数组置为0,根据散列计算出节点置为1,同时写了一个生成随机码的函数用于测试。
进口随机 进口mmh4 从bitarray进口bitarray 进口os.path 进口再保险 # bitarray长度 BIT_SIZE=50000 类BloomFilter (): def __init__(自我): bit_array=bitarray (BIT_SIZE) bit_array.setall (0) 自我。bit_array=bit_array 自我。bit_size=self.length () def get_points(自我、url): “““ 生成需要插入的位置 :param url: 返回:节点的列的表 “““ point_list=[] 因为我在范围(7): 点=mmh4.hash (url, 30 + i) % self.bit_size point_list.append(点) 返回point_list def(自我,url添加): “““ 添加到url bitarray中 :param url: 返回: “““ res=self.bitarray_expand () 点=self.get_points (url) 试一试: 点对点: 自我。bit_array[点]=1 返回& # 39;注册完成! & # 39; 除了例外e: 返回e def包含(自我,url): “““ 验证url是否存在 :param url: :返回真或假 “““ 点=self.get_points (url) #在bitarray中查找对应的点,如果有一个点值为0就说明该url不存在 在点p: 如果自我。bit_array [p]==0: 返回假 还真 def计数(自我): “““ 获取bitarrray中使用的节点数 返回:bitarray长度 “““ 返回self.bit_array.count () def长度(自我): “““ 获取bitarray的长度 返回:bitarray的长度 “““ 返回len (self.bit_array) def bitarray_expand(自我): “““ 扩充bitarray长度 返回:bitarray的长度或使用率,布隆过滤器的bitarray的使用最好不要超过50%,这样误判率低一些 “““ isusespace=圆(int (self.count ())/int (self.length ()), 4) 如果0.50 & lt;isusespace: #新建bitarray expand_bitarray=bitarray (BIT_SIZE) expand_bitarray.setall (0) #增加新建的bitarray 自我。bit_array=自我。bit_array + expand_bitarray 自我。bit_size=self.length () 返回self.bit_size 其他: 返回f # 39;长度尚可,{圆(isusespace * 100, 2)} % & # 39; def get_captcha (): “““ 生成用于测试的随机码 返回: “““=& # 39;种子0123456789 abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz& # 39; 验证码=?“ 因为我在范围(10): 验证码+=random.choice(种子) 打印(验证码) 返回验证码 if __name__==& # 39; __main__ # 39;: 布鲁姆=BloomFilter () 因为我在范围(100000): bloom.add (f # 39; www。{get_captcha ()} . com # 39;) print (bloom.length ()) print (bloom.count ()) print (bloom.count ())
以上是python使用布隆过滤器的案例分析的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!