博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
redis-布隆过滤器原理
阅读量:3986 次
发布时间:2019-05-24

本文共 953 字,大约阅读时间需要 3 分钟。

参考:

http://imhuchao.com/1271.html
https://www.cnblogs.com/zhanggguoqi/p/10571225.html

作用

判断某个值是否在某个集合中。

特点

1、存储空间小:
因为它的原理是由一个长度为m的位数组(二进制向量),一个字节有8个位,如果我们使用四个hash函数来运算,那么每个key就会占用四个位,一个字节可表示两个key。相比于原来的一个字符需要一个字节来存,如果一个key有30个字符,那就是30个字节了,可见Bloom Filter显著缩短了空间。

2、写入的过程:O(1)

分别让key经过四个hash函数,假如结果为123,33333,456,78906,那么就去位数组上以他们为index,找到对应的位置,将值设置为1。因为hash函数的值可能相同,为了降低了冲突的概率,需要用多个hash函数。

3、判断速度快:O(1)

Bloom FIlter的查找过程是,假如使用了四个hash函数(运算结果都是整数),遍历,对key执行hash运算,假如得到3000, 这个整数就是位数组上特定位置,位数组的值只有0和1,如果是0,就可以明确判断为不存在,其他hash函数没必要执行了,如果为1,接着执行,值为0就可以中断了,如果都是1,可以近似判断为存在,因为这是个只有四个样本的概率判断。由于直接通过Index来查找的,根本不需要遍历整个集合,效率极高。

4、结果:

如果判断为不存在,那么一定不存在;如果判断为存在,那么大概率是存在的。

5、缺点:

有一定的错误概率,当集合中的元素越来越多,二进制序列中的1的个数越来越多的时候,判断一个字符串是否在集合中就很容易误判,原本不在集合里面的字符串会被判断在集合里面。

节点删除困难,因为不同的key对应hash函数的结果可能相同,构成冲突,所以你不能简单的将四个hash函数结果对应的位置置为0的方式来表示你删除了这个key。

6、参数设置

我们预估要存的数据量为n,期望的误判率为p
1、位数组长度m
m = -nlnp / ( (ln2)^2 )

2、hash函数个数选组

k = mln2 / n

3、寻找hash函数

比如BKDRHash,JSHash,RSHash等等

在这里插入图片描述

你可能感兴趣的文章
i.mx53 启动信息
查看>>
i.mx53开发板挂载NFS
查看>>
驱动调试前期准备工作
查看>>
i.mx53 linux led driver
查看>>
杂七杂八的
查看>>
linux spi
查看>>
linux spi dev test program
查看>>
Overview of Linux kernel SPI support
查看>>
i.mx53 uboot
查看>>
linux 驱动开发 头文件
查看>>
嵌入式linux 开发板 dhcp ip
查看>>
/etc/resolv.conf
查看>>
/etc/hosts
查看>>
container_of()传入结构体中的成员,返回该结构体的首地址
查看>>
linux sfdisk partition
查看>>
ipconfig,ifconfig,iwconfig
查看>>
opensuse12.2 PL2303 minicom
查看>>
电平触发方式和边沿触发的区别
查看>>
中断函数中不能调用ioremap()!!!!!!!
查看>>
网络视频服务器移植
查看>>