10-哈希函数与哈希表、布隆过滤器

1、认识哈希函数

(1)一般来说输入是无穷,输出的有限的,常见的例如md5\sha1算法

(2)一个哈希函数,如果输入是相同的,那么输出的一定相同,就是意味着哈希函数没有任何随机因子

(3)不同的输入可能会导致相同的输出——哈希碰撞

(4)哈希函数的离散型、均匀性

2、哈希表的实现

1、加入N个字符串,对哈希表进行扩容,次数为O(logN),每一次扩容的时间代价为O(N),最后扩容完成的总代价为O(N*logN),单次的扩容代价为:O(N*logN)/N——O(logN),为什么可以使用哈希表的时候时间复杂度看作O(1):因为可以把扩容链设的很长,减少扩容代价,逼近O(1)。

2、离线扩容技术:因为JVM托管,可以在新的内存扩展新的哈希表,再把用户流量引到新的哈希表,所以时间代价更加毕竟O(1)

题目一:

 

 3、详解布隆过滤器

建立一个有增改查的集合,整体占的内存更小,允许一定不可避免的错误率,可以设置变得很低(不会出现比如本身是黑名单成员但是反馈说不是黑名单,只会出现本身是白名单但是反馈是黑名单)

3.1位图:bit arr\bit map

bit数组:每一个位置的信息占内存1bit:用基础类型构造

 

3.2 布隆过滤器:

在一个长度为m的位图上,对需要加黑名单的url进行k个哈希函数哈希运算,得到的值%m,算出来的值在对应的位图上标记。查询:拿到一个url,对其进行k次哈希函数运算,%m查询位置上是否为已标记,全部都是的话就是黑名单

3.2.1 影响失误率的因素:

1、m的长度(最主要)

2、k个哈希函数(根据样本量和m、预期失误率来决定k要多大)

3.2.2设置布隆过滤器(关注两个变量:h样本量大小、p失误率)

1、确定是不是使用布隆过滤器(有没有删除操作、允不允许一定的失误率)

2、确定失误率是多少

3、单一样本大小与设置布隆过滤器无关

m是内存大小,例如100亿条数据,失误率为万分之一,算出来m大概是26G

哈希函数个数k:

实际失误率p真:

 4、详解一致性哈希原理

哈希key的选择,要选择种类多的的key来做数据划分,来保证不同频率可以均匀分布在不同的服务器上

使用虚拟节点解决潜在问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值