{29,01,13,15,56,20,87,27,69,9,10,74},散列函数为:h(key)=key % 17,采用平方探测方法解决冲突。试在0到18的散列地址空间中对该关键字序列构造散列表。
时间: 2023-08-31 22:32:42 浏览: 98
### 回答1:
首先创建一个长度为18的散列表,初始值全部为-1。然后依次将每个关键字插入散列表中,如果发生冲突则采用平方探测方法解决。
具体过程如下:
1. 对于第一个关键字29,h(key)=29%17=12,将关键字29插入散列表的第12个位置,散列表变为:[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,29,-1,-1,-1,-1,-1,-1]。
2. 对于第二个关键字01,h(key)=1%17=1,将关键字01插入散列表的第1个位置,散列表变为:[-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,29,-1,-1,-1,-1,-1,-1]。
3. 对于第三个关键字13,h(key)=13%17=13,将关键字13插入散列表的第13个位置,散列表变为:[-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,29,-1,13,-1,-1,-1,-1]。
4. 对于第四个关键字15,h(key)=15%17=15,将关键字15插入散列表的第15个位置,散列表变为:[-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,29,-1,13,-1,15,-1,-1]。
5. 对于第五个关键字56,h(key)=56%17=5,将关键字56插入散列表的第5个位置,散列表变为:[-1,1,-1,-1,-1,56,-1,-1,-1,-1,-1,29,-1,13,-1,15,-1,-1]。
6. 对于第六个关键字20,h(key)=20%17=3,将关键字20插入散列表的第3个位置,散列表变为:[-1,1,-1,20,-1,56,-1,-1,-1,-1,-1,29,-1,13,-1,15,-1,-1]。
7. 对于第七个关键字87,h(key)=87%17=4,将关键字87插入散列表的第4个位置,发生冲突,需要采用平方探测方法解决。首先计算增量为1,然后将关键字87插入散列表的第5个位置,散列表变为:[-1,1,-1,20,87,56,-1,-1,-1,-1,-1,29,-1,13,-1,15,-1,-1]。
8. 对于第八个关键字27,h(key)=27%17=10,将关键字27插入散列表的第10个位置,散列表变为:[-1,1,-1,20,87,56,-1,-1,-1,-1,27,29,-1,13,-1,15,-1,-1]。
9. 对于第九个关键字69,h(key)=69%17=4,发生冲突,增量为1,插入散列表的第5个位置,再次发生冲突,增量为2,插入散列表的第7个位置,散列表变为:[-1,1,-1,20,87,56,-1,69,-1,-1,27,29,-1,13,-1,15,-1,-1]。
10. 对于第十个关键字9,h(key)=9%17=9,将关键字9插入散列表的第9个位置,散列表变为:[-1,1,-1,20,87,56,-1,69,-1,9,27,29,-1,13,-1,15,-1,-1]。
11. 对于第十一个关键字10,h(key)=10%17=10,发生冲突,增量为1,插入散列表的第11个位置,散列表变为:[-1,1,-1,20,87,56,-1,69,-1,9,10,29,-1,13,-1,15,-1,-1]。
12. 对于最后一个关键字74,h(key)=74%17=6,将关键字74插入散列表的第6个位置,散列表变为:[-1,1,-1,20,87,56,74,69,-1,9,10,29,-1,13,-1,15,-1,-1]。
构造散列表完成。
### 回答2:
根据散列函数h(key)=key%17,将关键字序列中的每个关键字依次进行散列得到散列地址。
首先,关键字29散列到的地址为h(29)=29%17=12。由于地址12已经被占用,发生了冲突,需要采用平方探测方法。
根据平方探测方法,如果发生冲突,则依次尝试h(key)+1^2, h(key)-1^2, h(key)+2^2, h(key)-2^2, …的地址,直到找到一个空地址。
对于关键字29,首先尝试h(29)+1^2=12+1=13地址,但该地址也已经被占用。继续尝试h(29)-1^2=12-1=11,结果发现11地址为空。
所以,将关键字29放置在地址11。
依此类推,关键字01散列到的地址为h(01)=1%17=1,地址1为空,所以将01放置在地址1。
关键字13散列到的地址为h(13)=13%17=13,地址13已经被占用,采用平方探测方法,尝试h(13)+1^2=14,地址14为空,所以将13放置在地址14。
...
依次类推,对关键字序列中的每个关键字进行上述步骤的操作。
最终,将关键字序列构造的散列表如下:
地址0:
地址1:01
地址2:
地址3:03
地址4:
地址5:15
地址6:20
地址7:
地址8:
地址9:09
地址10:10
地址11:29
地址12:
地址13:13
地址14:56
地址15:
地址16:87
地址17:
地址18:27
### 回答3:
平方探测方法是一种解决冲突的方法,它需要根据散列函数值进行平方计算,来检测下一个可能的空闲槽位。根据给定的关键字序列以及散列函数h(key)=key % 17,我们可以构造一个18大小的散列表。以下是具体步骤:
关键字序列:{29,01,13,15,56,20,87,27,69,9,10,74}
散列函数:h(key)=key % 17
散列表大小:18
1. 初始化散列表为全部为空位(0-17位置)。
2. 对于每个关键字,使用散列函数计算散列地址:
- 29 % 17 = 12 (关键字29的散列地址)
- 01 % 17 = 1 (关键字01的散列地址)
- 13 % 17 = 13 (关键字13的散列地址)
- 15 % 17 = 15 (关键字15的散列地址)
- 56 % 17 = 5 (关键字56的散列地址)
- 20 % 17 = 3 (关键字20的散列地址)
- 87 % 17 = 4 (关键字87的散列地址)
- 27 % 17 = 10 (关键字27的散列地址)
- 69 % 17 = 1 (关键字69的散列地址)
- 9 % 17 = 9 (关键字9的散列地址)
- 10 % 17 = 10 (关键字10的散列地址)
- 74 % 17 = 6 (关键字74的散列地址)
3. 开始插入关键字到散列表中:
- 将29插入到散列地址为12的槽位,槽位12为空,插入成功。
- 将01插入到散列地址为1的槽位,槽位1已被69占用,进行平方探测:
- 尝试下一个槽位:1 + 1^2 = 2 (散列地址2),槽位2为空,插入成功。
- 将13插入到散列地址为13的槽位,槽位13为空,插入成功。
(依次类推,直到插入完所有关键字)
最终得到的散列表为:{29, 01, 13, 15, 56, 20, 87, 27, 69, 9, 10, 74, 0, 0, 0, 0, 0, 0}
阅读全文