算法学习笔记----哈希函数

目录

哈希函数

位图

布隆过滤器(适用于add、select)

一致性哈希


哈希函数

输入域有限,输出域无穷 MP5:输出0~2^64-1 SHal:输出0~2^128-1 相同输入返回相同输出,不同输入可能有相同输出(哈希碰撞) 离散性:输出没规律 均匀性:输出均匀分布

1GB为10亿多B(2^30)

有40亿个数,用1GB内存挑出最大的数字:

直接用哈希表内存会爆掉,可以先用哈希函数计算后%m,把所有的数分为m个小文件,再用哈希表统计每一个小文件中的数,统计完一个就释放掉,最后返回出现最多的数。

位图

开一个int类型的数组,每一个值都为4字节32比特,看成位的数组,10个int类型就为320个比特类型数组

布隆过滤器(适用于add、select)

开一个空间m(bit)长度的位图,加入黑名单时,经过k个哈希函数算出k个位置描黑。查询的时候经过k个哈希函数计算出的k个位置如果都黑就认为添加过。可能会把白的变黑的。

n = 样本量 p = 失误率

m = -(n*lnp)/(ln2)^2 (除8) 理论

k = ln2 * m/n 约等于 0.7 * m/n 理论

p = ( 1 - e^(-n*k/m) )^k 真实

一致性哈希

分布式数据库的负载均衡问题:

经典结构:算完数据的哈希值后与现有机器数量取模,均匀分配到指定机器上,选种类多的方式分布。性别只有两种只能分配到两种机器上。如果扩张,要全量的重新计算所有值,再对现有机器数量取模。

一致性哈希:

把哈希函数计算出的值看作一个环,将服务器的机器码通过哈希函数计算,均分这个环,插入数据到通过哈希函数计算后顺时针最近的机器上。 扩容机器时,插到环上,把一块区域的数据从原本管这块区域的机器中迁移到新机器 两个问题:1、数量很少的机器无法做到均分环 2、即使原来能均分,但加入或减少机器时负载不均

虚拟节点技术可以解决

虚拟节点技术: 按比例抢环,每个机器分配相同多的数据,所有数据通过哈希函数计算后去站点,就做到环中每一段数据每个机器的占比相同,增加删除机器同理。 按数据抢环可以做到分配负载,如果一个机器很强就可以多分配数据

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值