数据结构—— 散列查找:散列函数的构造方法

Posted 大彤小忆

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构—— 散列查找:散列函数的构造方法相关的知识,希望对你有一定的参考价值。

数据结构系列内容的学习目录 → \\rightarrow 浙大版数据结构学习系列内容汇总

2. 散列函数的构造方法

  一个 “好”的散列函数一般应考虑下列两个因素:
    1. 计算简单,以便提高转换速度;
    2. 关键词对应的地址空间分布均匀,以尽量减少冲突。

2.1 数字关键词的散列函数构造

   1.直接定址法: 取关键词的某个线性函数值为散列地址,即 h ( k e y ) = a × k e y + b h(key) = a \\times key + b h(key)=a×key+b (a、b为常数)。

在这里插入图片描述
   2.除留余数法:散列函数为:h(key) = key mod p
            例: h(key) = key % 17

在这里插入图片描述
   这里:p =Tablesize = 17,一般p取素数。

   3.数字分析法 :分析数字关键字在各位上的变化情况,取比较随机的位作为散列地址。
             比如: 取11位手机号码key的后4位作为地址:
                 散列函数为: h(key) = atoi(key+7) (char *key)
                 如果关键词key是18位的身份证号码:

在这里插入图片描述
h 1 ( k e y ) = ( k e y [ 6 ] − ′ 0 ′ ) × 1 0 4 + ( k e y [ 10 ] − ′ 0 ′ ) × 1 0 3 +                                                                         ( k e y [ 14 ] − ′ 0 ′ ) × 1 0 2 + ( k e y [ 17 ] − ′ 0 ′ ) × 10 + ( k e y [ 17 ] − ′ 0 ′ ) h ( k e y ) = h 1 ( k e y ) × 10 + 10             ( 当 k e y [ 18 ] = ′ x ′ 时 )                                                                                 或     = h 1 ( k e y ) × 10 + k e y [ 18 ] − ′ 0 ′             ( 当 k e y [ 18 ] 为 ′ 0 ′   ′ 9 ′ 时 )                                       \\begin{matrix}h_{1}(key)=(key[6]-'0') \\times 10^{4}+(key[10]-'0') \\times 10^{3}+\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\\\ (key[14]-'0') \\times 10^{2}+(key[17]-'0') \\times 10+(key[17]-'0') \\\\ \\\\h(key)=h_{1}(key)\\times 10+10 \\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}(当key[18]='x'时)\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\\\ 或\\ _ {}\\ _ {}=h_{1}(key)\\times 10+key[18]-'0' \\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {} (当key[18]为'0'~'9'时)\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {} \\end{matrix} h1(key)=(key[6]0)×104+(key[10]0)×103+                                    (key[14]0)×102+(key[17]0)×10+(key[17]0)h(key)=h1(key)×10+10      (key[18]=x)             以上是关于数据结构—— 散列查找:散列函数的构造方法的主要内容,如果未能解决你的问题,请参考以下文章

数据结构 散列表

查找算法整理

散列的基本概念构造散列函数以及解决冲突

数据结构6. 查找

散列表(Hash table)及其构造

C/C++手撕哈希表详解