Hash表平均查找长度ASL计算

1 篇文章 0 订阅

开放地址查找成功的ASL和不成功的ASL

问题描述

ASL 指的是平均查找时间

关键字序列:(7、8、30、11、18、9、14)

散列函数: H(Key) = (key x 3) MOD 7

装载因子: 0.7


处理冲突: 线性探测再散列法

查找成功的 ASL 计算方法:

因为现在的数据是 7 个,填充因子是 0.7。所以数组大小=7/0.7=10,即写出来的散列表大小为 10,下标从 0~9。
第一个元素 7,带入散列函数,计算得 0。
第二个元素 8,带入散列函数,计算得 3。
第三个元素 30,带入散列函数,计算得 6。
第四个元素 11,带入散列函数,计算得 5。
第五个元素 18,带入散列函数,计算得 5;此时和 11 冲突,使用线性探测法,得 7。
第六个元素 9,带入散列函数,计算得 6;此时和 30 冲突,使用线性探测法,得 8。
第七个元素 14,带入散列函数,计算得 0;此时和 7 冲突,使用线性探测法,得 1。
所以散列表:

地址0123456789
key71481130189
成功1211133
不成功3212154

所以查找成功的计算:
如果查找 7,则需要查找 1 次。
如果查找 8,则需要查找 1 次。
如果查找 30,则需要查找 1 次。
如果查找 11,则需要查找 1 次。
如果查找 18,则需要查找 3 次:第一次查找地址 5,第二次查找地址 6,第三次查找地址 7,查找成功。
如果查找 9,则需要查找 3 次:第一次查找地址 6,第二次查找地址 7,第三次查找地址 8,查找成功。
如果查找地址 14,则需要查找 2 次:第一次查找地址 0,第二次查找地址 1,查找成功。
所以,ASL=(1+2+1+1+1+3+3)/ 7=12/ 7


查找不成功的 ASL 计算方法

1. 定义什么叫查找不成功
举个例子来说吧。在已知上面散列表的基础上,如果要查找 key 为 4 的关键字。根据散列函数可以计算 Hash(key)=Hash(4)=5。此时在地址为 5 的地方取出那个数字,发现 key=11,不等于 4。这就说明在装填的时候会发生冲突。根据冲突处理方法,会继续检测地址为 6 的值,发现 key=30,依然不等。这个时候到了地址为 6,但是依然没有找到。那么就说明根本就没有 key=4 这个关键字,说明本次查找不成功。注意:为什么到地址 6?因为散列函数中有 mod7 ,对应的地址为 0~6,即 0~6 查找失败的查找次数。
再举一个例子。查找 key 为 0的关键字,根据散列函数可以计算 Hash(key)=Hash(0)=0。此时在地址为 0 的地方取出那个数字,发现 key=7,不等于 0。这就说明在装填的时候会发生冲突。根据冲突处理方法,会继续检测地址为 1 的值,发现 key=14,依然不等。这个时候到了 地址为 2,发现为空,依然没有找到。所以停止查找,本次查找不成功。因为如果 key=0 这个关键字存在的话,依照冲突处理函数,就一定能找到它。总不能丢了吧。

2. 根据第一点定义的不成功,依次推下去:
查找地址为 0 的值所需要的次数为 3,
查找地址为 1 的值所需要的次数为 2,
查找地址为 2 的值所需要的次数为 1,
查找地址为 3 的值所需要的次数为 2,
查找地址为 4 的值所需要的次数为 1,
查找地址为 5 的值所需要的次数为 5,
查找地址为 6 的值所需要的次数为 4。 3.计算
查找不成功 ASL=(3+2+1+2+1+5+4)/ 7=18/ 7

原博客地址:https://www.cnblogs.com/qixinbo/p/7782314.html


链地址法

假设散列表的长度是 13,散列函数为 H(K) = k % 13,给定的关键字序列为{32, 14, 23, 01, 42, 20, 45, 27, 55, 24, 10, 53}。
拉链法
查找成功时的平均查找长度:

ASL = (1*6+2*4+3*1+4*1)/12 = 7/4

查找不成功时的平均查找长度:

ASL = (4+2+2+1+2+1)/13

注意:查找成功时,分母为哈希表元素个数,查找不成功时,分母为 mod 的 K 值。

  • 11
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值