数据结构 玩转数据结构 14-2 哈希函数的设计

发布时间 2023-09-27 07:06:34作者: 菜鸟乙

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