哈希函数与哈希表
一、哈希函数具有的特征
1、输入无穷大,输出是有限的。
2、哈希函数的计算规则一定是确定的,其中没有随机的成分。当输入是相同的时候,哈希函数的输出也一定是相同的;但是由于输入无限,输出一定,所以不同的输入可能有相同的输出。
3、哈希函数具有均匀性,当有大量的不同的输入的时候,相应的哈希函数值的分布是均匀的,即输入的规律与输出之间是没有关系的。(这在利用哈希函数提升性能时有很多的应用)
在哈希函数的使用过程中注意取模可以减少规模简化问题。
二、布隆过滤器
1、位图(bitmap):可以通过基本的数据结构(例如数组)组合位运算实现。
2、布隆过滤器
(1)、功能:主要用来实现允许错误率的类黑名单功能。
(2)、实现
问题描述:输入为n个url为黑名单,通过布隆过滤器实现对这些url的阻拦
实现思路:设有m bit的位图,便利n个url,对每个url用k个哈希函数求哈希函数值,再将哈希函数值%m,再将求的的值对应的位图位置为1。当判断某个url是否再黑名单中时,进行同样的操作,如果k个哈希函数值模m得到的相应位图位都为1则为黑名单。根据上述思路可知,这是存在一定的错误率的。
参数的设置:已知n,允许的错误率p
m = -(nInp)/(In2)^2
k = In2m/n
实际的错误率:(1-e^(-n*k/m)) ^k
三、一致性哈希
典型的应用场景是浏览器的数据如何合理分布在多个服务器中并高效解决数据迁移问题。其中的核心思想是环形(数据迁移)和虚拟节点(数据均匀分布)的引入。
在帅哥的激励下加油!!!