1.1.2 Hash与BloomFilter

1.1.2 Hash与BloomFilter

背景:

  • 使用word文档时,word如何判断某个单词是否拼写正确?
  • 垃圾邮件过滤算法是如何设计?
  • 公安办公时,如何判断嫌疑人是否在网逃名单中?
  • 缓存穿透问题如何解决?

上一节介绍了平衡二叉树中的红黑树和B\B+树(草稿丢了不补了)。

平衡二叉树的主要思想:通过比较的方式保证有序,通过每次排除一半元素的方式达到快速索引的目的。
增删改查时间复杂度为:O(log2n)

hash函数

映射函数 Hash(key) = addr
hash函数可能会把两个或两个以上的不同key映射到同一地址,这种情况称之为冲突(或hash碰撞)

选择hash

  • 计算速度快
  • 强随机分布(等概率,均匀地分布在整个地址空间)
  • murmurhash1, murmurhash2, murmurhash3, siphash(redis6.0中使用)
  • siphash主要解决字符串相近的强随机分布性(即10000001和10000002hash值也尽量分开)

hash算法不用具体了解,只需要知道如何选择使用哪种就可以

BloomFilter

应用场景:
用于判断某个key一定不存在,同时允许判断有误差的情况

构成:位图 + n个hash函数

由于hash碰撞处理的特性
位图中为0,一定不存在
但是位图中为1,不一定存在(出错概率可以通过设置位图大小来调整)

具体详情:布隆过滤器详解

优点:

  • 速度快,通过计算hash函数得到位图坐标(数组)可直接访问
  • 强随机

分布式一致性hash

解决了分布式缓存扩容的问题
例子:给2GB的内存,在20亿个整数中找到出现最多的数
通过散列表存储
K整数 4B
V出现次数 4B uint取值范围大于20亿(占4B)
如果全放在内存中:8B*20亿 = 16GB > 2GB 直接处理内存不足

前提:20亿个数据可以称为海量,能够比较符合概率,即不存在类似有一亿的数都一样的情况
步骤一:通过hash的强随机性处理之后,通过取余操作平均分为若干份。
步骤二:在每一份中寻找出出现次数最多的数。
步骤三:在若干份的出现次数最多的数中比较,得出 20亿个整数中出现最多的数

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值