设有一组关键字 { 29,01, 13,15,56,20,87,27,69,9,10,74 },散列函数为 H(key)=key%17,采用平方探测方法解决冲突。试在 0 到 18 的散列地址空间中对该关键字序列构造散列表,则成功查找的平均查找长度为 __
时间: 2024-04-03 16:34:55 浏览: 61
假设人名为中国人姓名的汉语拼音形式。待填入哈希表的人名共有30个,取平均查找长度的上限为2。哈希函数采用除留余数法构造,用线性探测再散列法处理冲突。
首先,我们需要确定每个关键字的散列地址,根据散列函数 H(key)=key%17,得到每个关键字的散列地址:
- 29 → 12
- 01 → 1
- 13 → 13
- 15 → 15
- 56 → 5
- 20 → 3
- 87 → 6
- 27 → 10
- 69 → 4
- 9 → 9
- 10 → 10
- 74 → 8
接下来,我们采用平方探测法来解决冲突,假设散列表的大小为 19。则对于每个关键字,如果其散列地址已经被占用,则沿着散列表继续探测,直到找到一个空闲位置。平方探测的公式为:
- 第一次探测:$H(key)$
- 第二次探测:$(H(key)+1^2)\%19$
- 第三次探测:$(H(key)+2^2)\%19$
- 第四次探测:$(H(key)+3^2)\%19$
- ...
以关键字 29 为例,其散列地址为 12,发现该位置已经被占用,于是沿着散列表继续探测。第一次探测的位置为 $(12+1^2)\%19=13$,发现该位置也被占用,于是继续探测。第二次探测的位置为 $(12+2^2)\%19=16$,发现该位置为空闲,于是将关键字 29 存储在该位置上。
按照上述方法,可以得到以下散列表:
- 0:
- 1:01
- 2:
- 3:20
- 4:69
- 5:56
- 6:87
- 7:27
- 8:74
- 9:9
- 10:10
- 11:
- 12:29
- 13:13
- 14:
- 15:15
- 16:
- 17:
- 18:
可以看出,共有 12 个关键字被存储在散列表中。成功查找的平均查找长度为所有查找长度之和除以关键字的总数。对于每个关键字,其查找长度为其第一次探测的位置与其实际存储位置之间的距离。例如,关键字 29 的查找长度为 2,关键字 01 的查找长度为 0。
因此,成功查找的平均查找长度为:
$$\frac{2+0+0+0+1+0+0+1+0+0+0+0}{12}=\frac{4}{3}=1.33$$
因此,成功查找的平均查找长度为 1.33。
阅读全文