0 课程地址
https://coding.imooc.com/lesson/207.html#mid=15345
1 重点关注
1.1 本节内容
使用合理的哈希函数的理论支持,解析不同数据类型键如何转为整型索引(这是其中最通用的一种方式)
1.2 哈希函数的设计原则
- 一致性:如果a==b,则hash(a)=hash(b);反之则不成立
- 高效性:计算高效便捷
- 均匀性:哈希值均匀分布
键通过哈希函数得到的索引分布越均匀越好。
比如:身份证号取模后6位,倒数56位是日期,只有01-31,就是不均匀的体现
2 课程内容
2.1 整型
- a 小范围正整数直接使用
- b 小范围负整数偏移成正整数
- c 大范围正整数取模,通常使用素数取模(原理可以参考数论)
针对不同的数据规模,给出不同的素数取模,网站:
https://planetmath.org/goodhashtableprimes
2.2 浮点型
转化为整型,然后取模
2.3 字符串
- 原理
- 为了提高计算速度
- 为了避免整型溢出(利用了数论求余的性质,直接应用即可)
- 代码实现:
2.4 复合类型
参照字符串
3 Coding
诸葛