探究如何计算哈希表查找成功、失败时的平均查找长度(附实例)

对于查找成功时的平均查找长度,书上有明确的定义:
在这里插入图片描述
而题目设定条件都是在等概率下查找,所以ASL=(C0+C1+...+Cn)*1/n.
这就说明了查找成功是针对关键字查找的,最后除以关键字的总个数。
我们来看一道书上的例题:
在这里插入图片描述
构建出来的哈希表有八个元素,针对这八个元素的比较次数,得出ASLsuccess=(1+1+1+2+1+2+1+2)/8=11/8.

而查找失败时的平均查找长度,却是针对位置的查找。
为什么呢,因为如果我们要查找表中的元素,那么一定可以找到,所以讨论查找失败就没有意义。我们讨论查找失败,一定是针对表中没有的元素在这张表中查找,才有查找失败的意义。

所以,针对上图的哈希表,我们将待查找关键字X代入哈希函数,我们设定X与这张表中的关键字都不相同:
当H(X)=3X mod 11=0时,因为散列地址为0的位置没有关键字,所以查找1次就失败了;
当H(X)=3X mod 11=1时,因为散列地址为1的位置有关键字4,X与4不等,所以按照线性探测法向后探测1,散列地址为2的位置没有关键字,所以查找失败,一共查找了2次;
当H(X)=3X mod 11=2时,同0;
当H(X)=3X mod 11=3时,因为散列地址为3的位置有关键字12,X与12不等,所以向后线性探测,散列地址为4的位置有关键字49,还不等,继续探测,因为X与表中的关键字都不等,所以直到散列地址为10没有关键字,才查找失败,这次一共查找了8次;
…以此类推

综上所述,我们可以得出结论:

失败查找次数就是该位置向后探测到第一个没有关键字的地址位置之间的距离

而求平均数的除数,是模的大小

因为失败查找次数是针对位置查找,因为模为11,所以查找的位置(哈希函数的值)为0-10(共11个),针对这11个位置进行查找,而与表的长度无关。

理清了思路,我们来看看链地址法表示的哈希表:
在这里插入图片描述
成功时的平均查找长度很好求,针对表中的每个关键字:有五个关键字找一次:4,12,49,13,32;三个关键字找两次:38,24,21.

失败时的平均查找长度针对位置来查找:
等于0时,只有空指针域,查找1次;
等于1时,带一个结点,所以查找2次找到空指针;

等于4时,带两个节点,所以查找3次找到空指针;

综上所述,我们可以总结:

失败查找次数就是当前位置所带的结点个数+1

使用链地址法查找时无二次聚集现象(二次聚集:处理冲突过程中发生的两个第一个散列地址不同的记录争夺同一个后继散列地址的现象)

除数也是模的大小

你学会了吗?

  • 102
    点赞
  • 377
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 15
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

新西兰做的饭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值