哈希表查找 的 平均长度

将关键字序列(7、8、30、11、18、9、14)散列存储到散列表中。散列表的存储空间是一个下标从0开始的一维数组。散列函数为: H(key) = (key*3) MOD 7,处理冲突采用线性探测再散列法,要求装填(载)因子为0.7。
(1) 请画出所构造的散列表;
(2) 分别计算等概率情况下查找成功和查找不成功的平均查找长度。

一、查找成功平均长度

  • 通过公式计算出存放的位置,如果该位置已经有数字了,往后找到一个空的放下。
  • 存放示意图
存放位置 0 1 2 3 4 5 6 7 8 9
存放数字 7 14   8   11 30 18 9  
  • 查找时候,一次找到的查找长度为1,否则多移动一格查找长度加一。如下表
存放位置 0 1 2 3 4 5 6 7 8 9
存放数字 7 14   8   11 30 18 9  
查找长度 1 2   1   1 1 3 3  
  • 由此可得查找成功的平均查找长度为:(1+1+1+1+3+3+2)/7 = 12/7

二、查找不成功平均长度

存放位置 0 1 2 3 4 5 6 7 8 9
存放数字 7 14   8   11 30 18 9  

接下来讨论不成功的情况,由上表,计算查找不成功的次数就直接找关键字到第一个地址上关键字为空的距离即可, 但根据哈希函数地址为MOD7,因此初始只可能在0~6的位置。等概率情况下,查找0~6位置查找失败的查找次数为:

看地址0,到第一个关键字为空的地址2的距离为3,因此查找不成功的次数为3.     

地址1, 到第一个关键为空的地址2的距离为2,因此查找不成功的次数为2.

地址2,  到第一个关键为空的地址2的距离为1,因此查找不成功的次数为1.

地址3,到第一个关键为空的地址4的距离为2,因此查找不成功的次数为2.

地址4,到第一个关键为空的地址4的距离为1,因此查找不成功的次数为1.

地址5,到第一个关键为空的地址2(注意不是地址9,因为初始只可能在0~6之间(因为只有7个数),因此循环回去)的距离为5,因此查找不成功的次数为5.

地址6,到第一个关键为空的地址2(注意不是地址9,因为初始只可能在0~6之间,因此循环回去)的距离为4,因此查找不成功的次数为4.

因此查找不成功的次数表如下表所示

存放位置 0 1 2 3 4 5 6 7 8 9
存放数字 7 14   8   11 30 18 9  
查找不成功长度 3 2 1 2 1 5 4      
  • 所以查找不成功平均长度:(3+2+1+2+1+5+4)/ 7 = 18/7。

猜你喜欢

转载自blog.csdn.net/weixin_39731083/article/details/81591810