redis实现布隆过滤器,Redis布隆过滤器

  redis实现布隆过滤器,Redis布隆过滤器

  6 SPRedis布鲁姆过滤器

  根据以下说明描述如何实现redis Bloom过滤器:

  首先构造n个哈希方法,每个哈希方法字符串到key值的映射公式为:key=(i * keys s)% mod,其中key从0开始,s是字符串中每个字符的ASCII值,I是哈希方法的个数(从1开始),mod是每个方法对应的随机数,取值范围为10000-20000。

  实现add函数,给Bloom filter添加一个字符串:使用每个构造的hash方法,得到N个键值,标记对应的键值。

  实现contains函数检查给定的字符串是否在Bloom filter中:检查每个hash方法的键值是否有标记。

  输入字符串数组s1意味着首先将这些字符串添加到布隆过滤器中,然后检查字符串数组s2中的字符串是否在布隆过滤器中。

  示例1输入:

  [牛],[牛,牛,牛],3返回值:

  [0,0,1,0]描述:

  0表示不在Bloom filter中,1表示Bloom filter中问题的解决方案很模糊,让人无从下手。可以先看看Bloom filter的原理,再做题。

  想法:

  用n个hash函数为每个字符串生成一个key,然后将key值对应的位设为1遍历第二个输入数组,用同一个hash函数为它生成对应的key,然后判断对应的位是否为真。只要有一位不为真,就说明该字符不存在。解释:

  我在这里偷懒了,因为题目只说了mod范围是10000 ~ 20000,没有说明每个哈希函数的mod。题目说是随机的,这里直接写成了一万,但是不影响最后的结果~ ~ ~

  代码很简单,如下所示:

  #包含位/标准数据。h

  使用命名空间std

  long generate_key(int i,long mod,const std:string str)

  {

  长键=0;

  for(自动s : str)

  {

  key=(I * key s)% mod;

  }

  回车键;

  }

  向量int BloomFilter(向量字符串s1,向量字符串s2,int n)

  {

  STD:bit set 10000 bs;

  长mod=10000

  用于(自动s : s1)

  {

  for(int I=1;I=n;我)

  {

  long key=generate_key(i,mod,s);

  bs.set(键);

  }

  }

  STD:vector int ans;

  用于(自动s : s2)

  {

  int flag=1;

  for(int I=1;I=n;我)

  {

  long key=generate_key(i,mod,s);

  如果(!bs[键])

  {

  flag=0;

  打破;

  }

  }

  ans . push _ back(flag);

  }

  返回ans

  }

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • 关于redis数据库入门详细介绍图片,redis数据库的使用,关于Redis数据库入门详细介绍
  • redis队列操作命令,redis 循环队列
  • redis队列操作命令,redis 循环队列,redis实现简单队列
  • redis部署应用服务器上,redis如何启动服务器
  • redis部署应用服务器上,redis如何启动服务器,搭建Redis服务器步骤详细介绍
  • redis缓存穿透和击穿解决方案,redis缓存穿透,缓存雪崩解决
  • redis缓存穿透和击穿解决方案,redis缓存穿透,缓存雪崩解决,redis缓存穿透解决方法
  • Redis缓存,redis和缓存
  • Redis缓存,redis和缓存,Redis缓存详解
  • redis的配置,启动,操作和关闭方法有哪些,关闭redis的命令,Redis的配置、启动、操作和关闭方法
  • redis的主从配置方法详解图,Redis主从配置
  • redis的主从配置方法详解图,Redis主从配置,redis的主从配置方法详解
  • redis界面工具,mac安装redis可视化工具
  • redis界面工具,mac安装redis可视化工具,推荐几款 Redis 可视化工具(太厉害了)
  • redis正确使用的十个技巧是什么,redis正确使用的十个技巧有哪些
  • 留言与评论(共有 条评论)
       
    验证码: