哈希函数的定义:
out f(in)
1)in -> ∞, out -> S
输入域是无穷的,输出域是有限的,也就是S域;
2)相同的输入一定会得到相同的输出;
3)不同的输入可能会有相同的输出,这也就是哈希碰撞;
4)*** 均匀性和离散型 ***
如果in1-inN通过哈希计算后,得到的out1-outN在S域上均匀分布,那么out对m取模后,得到的值也会在0-m-1域上均匀分布。
题1:
有40亿个正整数,我们要统计其中出现次数最多的数,限定内存为1G。
思考:
1. 如果使用hash表,key代表某个数,value代表这个数出现的次数进行统计,那么最坏的情况是每个数都只出现一次,内存占用会达到32G,超过1G的内存限制;
2. 我们先将这40亿个数进行哈希计算,并对100取模,那么所有的数会被分配到100个不同的桶中,且相同的数肯定会落到同一个桶中,我们只需要遍历每个桶,统计每个桶中出现次数最多的数。由于数据集被分成了100个桶,使用的内存为0.32G,可以实现该目的。