一,哈希函数
特性:
1.输入阈无穷,输出阈有限
2.相同的输入参数,一定返回相同的值
3.不同的输入,有可能会导致相同的输出(哈希碰撞)
4均匀性,离散性(假设有一个输入集合a,通过哈希函数f得到一个均匀分布的数据集合b,b再模m,那么就会得到一组在0~m-1上均匀分布的数)
例题1:
假设有一个大文件,大文件中都是无符号整数,值范围是0~2的32次方-1,这样的数有40亿个,如果只有1G内存,返回出现次数最多的数是哪个数。
如果将这一个文件放到一个哈希表中那个需要的最大内存是32G(最坏的情况下所有数都不一样,(key 4B+value4B)*40亿),所以将文件分割成100个文件(统计完一个文件内存释放掉),将m1 =3那么将a1放到3号文件中,根据哈希函数的性质,0到99号文件含有不同种数的数量是差不多的, 每个文件中都会有一个出现最多的数,一共有100个,100个次数中最多的就是最后返回值
二.哈希表的实现
哈希表最大的特点是在使用的时候查询时间复杂度可以认为是O(1),如果链表长度太长那么肯定不符合,所以需要扩容。最主要的