哈希函数

参考学习原文:https://blog.csdn.net/u012835097/article/details/79407591,本文只是本人学习记录!!!

1.存储时先使用哈希函数计算,然后把它们存入对应的位置,查找的时候,要先使用哈希函数计算它的位置,然后去那个位置查看是否存在就好了。

哈希 其实是随机存储的一种优化,先进行分类,然后查找时按照这个对象的分类去找。

哈希通过一次计算大幅度缩小查找范围,自然比从全部数据里查找速度要快。

哈希的过程需要哈希函数进行计算,哈希函数是一种映射关系。

adr = Hash(key)

几种常见的哈希函数构造方法

1.直接定址法

  • 取关键字或关键字的某个线性函数值为散列地址。
  • 即 H(key) = key 或 H(key) = a*key + b,其中a和b为常数。

2.除留余数法

  • 取关键字被某个不大于散列表长度 m 的数 p 求余,得到的作为散列地址。
  • 即 H(key) = key % p, p < m。 

3.数字分析法

  • 当关键字的位数大于地址的位数,对关键字的各位分布进行分析,选出分布均匀的任意几位作为散列地址。
  • 仅适用于所有关键字都已知的情况下,根据实际应用确定要选取的部分,尽量避免发生冲突。

      

4.平方取中法

  • 先计算出关键字值的平方,然后取平方值中间几位作为散列地址。
  • 随机分布的关键字,得到的散列地址也是随机分布的。

    

5.折叠法(叠加法)

  • 将关键字分为位数相同的几部分,然后取这几部分的叠加和(舍去进位)作为散列地址。
  • 用于关键字位数较多,并且关键字中每一位上数字分布大致均匀。 

   

6.随机数法

  • 选择一个随机函数,把关键字的随机函数值作为它的哈希值。
  • 通常当关键字的长度不等时用这种方法。 

构造哈希函数的方法很多,实际工作中要根据不同的情况选择合适的方法,总的原则是尽可能少的产生冲突。

通常考虑的因素关键字的长度分布情况哈希值的范围等。

如:当关键字是整数类型时就可以用除留余数法;如果关键字是小数类型,选择随机数法会比较好。

 

哈希的应用

  • 哈希表
  • 分布式缓存
posted @ 2021-04-28 15:05  姜子牙的姜  阅读(720)  评论(0编辑  收藏  举报