哈希表查找不成功时的平均查找长度

 

哈希表查找不成功怎么计算?
解答:先建好表,然后可以算出每个位置不成功时的比较次数之和,再除以表空间个数!
例如:散列函数为hash(x)=x MOD 13,用线性探测,建立了哈希表之后,如何求查找不成功时的平均查找长度!?
     地址: 0   1   2   3   4   5   6   7   8   9   10   11   12

     数据: 39  12  28  15  42  44   6  25  -  -   36   -   38

  成功次数: 1   3   1   2   2   1   1   9           1        1

不成功次数: 9   8   7   6   5   4   3   2   1   1    2   1    10

查找成功时的平均查找长度:ASL=(1+3+1+2+2+1+1+9+1+1)/10 =2.2

查找不成功时的平均查找长度:ASL=(9+8+7+6+5+4+3+2+1+1+2+1+10)/13=4.54

说明:

第n个位置不成功时的比较次数为,第n个位置到第1个没有数据位置的距离。

至少要查询多少次才能确认没有这个值。

(1) 查询hash(x)=0,至少要查询9次遇到表值为空的时候,才能确认查询失败。

(2) 查询hash(x)=1,至少要查询8次遇到表值为空的时候,才能确认查询失败。

(3) 查询hash(x)=2,至少要查询7次遇到表值为空的时候,才能确认查询失败。

(4) 查询hash(x)=3,至少要查询6次遇到表值为空的时候,才能确认查询失败。

(5) 查询hash(x)=4,至少要查询5次遇到表值为空的时候,才能确认查询失败。

(6) 查询hash(x)=5,至少要查询4次遇到表值为空的时候,才能确认查询失败。

(7) 查询hash(x)=6,至少要查询3次遇到表值为空的时候,才能确认查询失败。

(8) 查询hash(x)=7,至少要查询2次遇到表值为空的时候,才能确认查询失败。

(9) 查询hash(x)=8,至少要查询1次遇到表值为空的时候,才能确认查询失败。

(10)查询hash(x)=9,至少要查询1次遇到表值为空的时候,才能确认查询失败。

(11)查询hash(x)=10,至少要查询2次遇到表值为空的时候,才能确认查询失败。

(12)查询hash(x)=11,至少要查询1次遇到表值为空的时候,才能确认查询失败。


(13)查询hash(x)=12,至少要查询10次遇到表值为空(循环查询顺序表)的时候,才能确认查询失败。

 

### 计算哈希表查找失败平均查找长度 对于给定的关键字集合 {19, 1, 23, 14, 55, 20, 84, 27, 68, 11, 10, 77} 和哈希函数 H(key) = key % 13,在使用线性探测法处理冲突的情况下,可以计算出查找失败平均查找长度。 #### 构建哈希表 首先按照指定的哈希函数和线性探测法建立哈希表。由于哈希表大小设定为19(即索引范围是从0到18),当发生碰撞通过线性探测找到下一个可用位置直到填满为止[^2]。 | Index | Value | |-------|-------| | 0 | 10 | | 1 | 1 | | 2 | 27 | | 3 | 14 | | 4 | 20 | | 5 | 23 | | 6 | 19 | | 7 | | | 8 | 84 | | 9 | 68 | | 10 | 77 | | 11 | 11 | | 12 | 55 | 注意:上表仅展示了部分填充情况;实际应用中应继续完成整个表格直至所有元素都被放置妥当。 #### 查找失败分析 为了评估查找失败的情况,考虑在上述列表中的随机键值尝试访问该哈希表的情形。例如试图寻找存在于当前哈希表内的数值如`key=2`: - `H(2)` 将指向 index 2 的槽位,但是这里已经存储了其他数据项 (`Value=27`) ,因此需要进一步探查后续的位置。 根据定义,ASL_unsuccessful 可以表示如下公式: \[ ASL_{unsuccessful}(n,m)=\frac{\sum_{i=0}^{m-n}{P(i)}}{m-n}\] 其中 \( P(i)\) 表示首次遇到空闲单元前经过 i 步的概率分布,\( n \) 是已存入记录数目而 m 则代表总的槽数量。在线性探测方案下,如果假设均匀分布,则有简单近似表达式可用于估算此参数: \[ ASL_{unsuccessful}=1+\frac{n}{2(m-n)}\] 具体来说,对于本案例而言,假设有 N 个同关键字被映射到了 M 大小的空间内 (\(N<m\) ) : \[ ASL_{unsuccessful}=1+\frac{12}{2*(19-12)}≈1.857\] 这意味着在一个理想化的模型里,每次未命中查询大约会经历接近两次比较操作才能确认目标确实缺失。 ```python def calculate_asl_unsuccessful(n, m): """Calculate the average unsuccessful search length.""" asl_unsuccessful = 1 + (n / (2 * (m - n))) return round(asl_unsuccessful, 3) asl_result = calculate_asl_unsuccessful(12, 19) print(f"The estimated Average Search Length for Unsuccessful searches is approximately: {asl_result}") ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值