哈希函数和哈希表
什么是哈希函数:
哈希函数性质:
1)输入的值是无穷大的,输出的值有限制
2)相同的输入值必得到相等的输出值
3)不同的输出也可能得到相同的输出值(被称为哈希碰撞)
第四条如下:
不管给定多少条数据得到多少条输出值,假如s圈为范围,每一个输入值都相当于在圈内点一个点,当用一个圆随机圈几个时,圆内所包含的点一样
哈希函数使用:
给定一组数据,通过f哈希函数计算得到另一组数据,再同时余上m得到第三组数据,若能保证第二组数据在s域上均匀分布,这在0到m-1上也均匀分布
假设有一个大文件,文件里都是无符号整数(范围0到2^32-1),大文件总共有40亿个,给你1g的内存,给定返回出现数次数最多的是哪个
将所有得数经过哈希函数变换之后,余上100将所有的数的范围控制在0到100之间,再存入哈希表,出现次数最多的就是
哈希表的实现:基于哈希函数
当某个值后面挂的链表超过一定的长度时,根据哈希函数的性质可以确定其它链的长度接近这个值,这是进行扩容,防止之后查询时间过长
每次扩容代驾:若已加入n个字符串,这是经历了logn次,增加n个,代价为o(n*logn)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Sky小天的个人博客!