为下列关键字建立一个装填因子不小于0.75的哈希表,并计算所构造的哈希表的平均查找长度。 (ZHAO, QIAN, SUN, LI, ZHOU, WU, ZHENG, WANG, CHANG, CHAO, YANG, JIN)
时间: 2023-09-25 21:14:18 浏览: 79
好的,这是一个关于哈希表的问题。为了构造一个装填因子不小于0.75的哈希表,我们可以考虑使用开放地址法中的线性探测法。具体步骤如下:
1. 首先确定哈希表的大小,通常选择一个质数,比如13。
2. 然后对每个关键字进行哈希,这里我们可以使用简单的取余法,即将关键字的ASCII码相加再对13取余。例如,对于关键字"ZHAO",哈希值为(90+72+65+79)%13=3。
3. 如果该位置已经被占用,就顺序往后查找,直到找到一个空位置插入。例如,对于关键字"QIAN",哈希值为(81+73+65+78)%13=7,但是位置7已经被"ZHOU"占用了,于是就往后查找,直到找到一个空位置插入。
4. 重复步骤3,直到所有关键字都插入到哈希表中。
通过上述步骤,我们可以得到下面这个哈希表:
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
|------|------|------|------|------|------|------|------|------|------|------|------|------|
| | YANG | | ZHAO | ZHOU | WANG | | QIAN | CHANG| | SUN | JIN | LI |
| | | | | | | | | | CHAO | WU | | ZHENG|
其中,每个位置存储的是对应的关键字。注意到这个哈希表的装填因子为12/13,即0.923,大于0.75,符合要求。
接下来,我们来计算这个哈希表的平均查找长度。平均查找长度可以用下面的公式计算:
ASL = (n1 + 2*n2 + 3*n3 + ... + knk) / n
其中,n是关键字的总数,ni是查找第i个关键字时所需的比较次数,k是最大的比较次数。例如,如果所有关键字都可以在第一次比较时找到,那么k就是1;如果所有关键字都需要比较2次才能找到,那么k就是2。
在这个哈希表中,我们可以看到:
- 关键字"ZHAO"、"QIAN"、"SUN"、"LI"、"ZHOU"、"WU"、"ZHENG"、"WANG"、"CHANG"、"CHAO"、"YANG"、"JIN"一共需要12次比较才能找到,因此n1=12。
- 所有关键字都可以在第一次比较时找到,因此n2=n3=...=nk=0。
因此,这个哈希表的平均查找长度为:
ASL = (n1 + 2*n2 + 3*n3 + ... + knk) / n = n1 / n = 12 / 12 = 1
也就是说,平均只需要一次比较就能找到任意一个关键字。
阅读全文