算法习题之与哈希有关的结构

哈希函数 -> out f(in data)

1)输入参数data,假设是in类型,特征:可能性无穷大,比如str类型的参数
2)输出参数类型out,特征:可能性可以很大,但一定是有穷尽的
3)哈希函数没有任何随机的机制,固定的输入一定是固定的输出
4)输入无穷多但输出值有限,所以不同输入也可能输出相同(哈希碰撞)
5)再相似的不同输入,得到的输出值,会几乎均匀的分布在out域上

哈希表

1.哈希表起始桶容量
2.哈希表在插入值时,将key进行hash并%桶的容量,放入数组中,当%后的数值相同,就将当前的key和value放在当前桶的链表上
3.查询时,将key进行hash并%桶的容量,找到当前桶的位置,并遍历寻找链表上对应的key
4.当当前的链表的长度大于某个定值,进行扩容一倍,将原来的记录取出来,重新进行%新的容量,再放入新桶里

哈希函数作用

可以把数据根据不同值,几乎均匀的分开

布隆过滤器

1)利用哈希函数的性质
2)每一条数据提取特征
3)加入描黑库

布隆过滤器重要的三个公式

1,假设数据量为n,预期的失误率为p(布隆过滤器大小和每个样本的大小无关)
2,根据n和p,算出Bloom Filter一共需要多少个bit位,向上取整,记为m
3,根据m和n,算出Bloom Filter需要多少个哈希函数,向上取整,记为k
4,根据修正公式,算出真实的失误率p_true

一致性哈希

分布式存储结构最常见的结构
1)哈希域变成环的设计
2)虚拟节点技术

猜你喜欢

转载自blog.csdn.net/sam475259540/article/details/131178186