为以下关键字构造装填因子不小于0.75的哈希表,并给出平均查找长度。{ZHAO, QIAN, SUN, LI, ZHOU, WU, ZHENG, WANG, CHANG, CHAO, YANG, JIN}
时间: 2023-10-05 19:11:58 浏览: 66
我们可以选择使用线性探测法来构造哈希表,首先需要选择一个合适的哈希函数。假设哈希表的大小为13(选择一个质数可以减小哈希冲突的概率),可以选择如下哈希函数:
hash(key) = (sum(key) * 31) % 13
其中,sum(key) 表示将关键字每个字符的 ASCII 码值相加的结果。
接下来,将关键字依次插入哈希表中,如果发现冲突,则采用线性探测法解决,即向后查找下一个空槽位,直到找到空槽位为止。插入后的哈希表如下:
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
|---|---|---|---|---|---|---|---|---|---|----|----|----|
| LI|JIN| ZHAO|ZHOU| WU|CHANG| YANG|ZHENG|QIAN|SUN| NULL|CHAO| WANG|
可以发现,这个哈希表的装填因子为 12/13 ≈ 0.92,远大于 0.75,因此符合要求。
平均查找长度(ASL)可以通过以下公式计算:
ASL = (1 / n) * Σ(di + 1)
其中,n 表示关键字数量,di 表示第 i 个关键字在查找时需要经过的槽位数量。经过统计,可以得到每个关键字的查找长度如下:
| LI |JIN| ZHAO|ZHOU| WU|CHANG| YANG|ZHENG|QIAN|SUN|CHAO| WANG|
|---|---|---|---|---|---|---|---|---|---|---|---|
| 2 | 3 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
因此,ASL = (1/12) * (2+3+0+1+0+0+0+0+0+0+1+1) ≈ 0.83。
阅读全文