python使用布隆过滤器的案例分析

  介绍

小编给大家分享一下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使用布隆过滤器的案例分析的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

python使用布隆过滤器的案例分析