1单选(2分)
假设你将下列数据:
113 , 117 , 97 , 100 , 114 , 108 , 116 , 105 , 99
根据开放定址的线性探测法,填入长度为11的散列表中,且散列函数选为h(n)=n%11
哪一个选项最好地表达了填入数据之后散列表的状况?
A. 117, 114, 108, 116, 105, 99, __, __, 97, 100, 113
B. 100, 113, 117, 97, 14, 108, 116, 105, 99, __, __
C. 100, __, __, 113, 114, 105, 116, 117, 97, 108, 99
D. 99, 100, __, 113, 114, __, 116, 117, 105, 97, 108
正确答案:D
2单选(2分)
对于一个有13个槽的散列表,选取散列函数为h(n)=n%13,冲突解决方案选为开放定址的线性探测,以首个槽为0号,末个槽为12号。26,130和27按顺序填入,问他们的填入槽号分别为?
A. 0,0,1
B. 0,1,2
C. 1,2,0
D. 1,0,2
正确答案:B
3单选(2分)
对于一个有13个槽的散列表,选取散列函数为h(n)=n%13,冲突解决方案选为数据项链方法,以首个槽为0号,末个槽为12号。26,130和27按顺序填入,问他们的填入槽号分别为?
A. 0,0,1
B. 0,1,2
C. 0,0,2
D. 1,1,2
正确答案:A
解析: A、数据项链方法可以共用槽
4单选(2分)
以下是一个槽数为7的散列表,采用开放定址的线性探测:
7,14,21,__,25,18,11
查找数据项21时需要经过几次比对?
A. 2
B. 4
C. 3
D. 1
正确答案:C
解析: C、需要与0,1,2号槽的7,14,21分别比对,得到数据在2号槽
5单选(2分)
以下是一个槽数为7的散列表,采用开放定址的线性探测:
7,14,21,__,25,18,11
查找数据项24时需要经过几次数据比对(计算槽号次数不计)?
A. 1
B. 3
C. 2
D. 0
正确答案:D
解析: D、计算得到24应该在3号槽,但3号槽为空,不必比对
6多选(3分)
下列关于一个数据项数量为N的完美散列的叙述何者正确?
A. 散列的存储一般需要比顺序存储使用更多存储空间
B. python中的字典数据类型是散列的一种应用
C. python中的列表数据类型是散列的一种应用
D. 散列的存储一般需要比顺序存储使用更少存储空间
正确答案:A、B
7多选(3分)
假设你想为全学院毕业班同学共350人做通讯录,且打算将11位手机号存储在某采用开放定址的线性探测的散列表。以下散列方案中合适为?
A. 选取手机号首三码
B. 选取手机号末三码
C. 选取手机号对211(211是一个质数)的余数
D. 选取手机号对607(607是一个质数)的余数
正确答案:B、D
解析: A、大家的手机号前两位多为13,16,18,极有可能散列效果不佳或无法成功散列 B、外卖、快递和热门餐馆预约叫号确认的常用方式,实测可用 C、350个数据项无法在211个槽成功散列 D、对350个数据项而言,607是一个足够大乃至于可以用于散列的质数
8多选(3分)
以下关于散列算法分析的叙述,何者正确?
A. 如果采用数据链来解决冲突,负载因子0.8,成功的查找,平均需要比对次数约为3
B. 如果采用数据链来解决冲突,负载因子8,失败的查找,平均需要比对次数约为8
C. 如果采用数据链来解决冲突,负载因子8,成功的查找,平均需要比对次数约为5
D. 如果采用线性探测的开放定址法来解决冲突,负载因子0.8,成功的查找,平均需要比对次数约为3
正确答案:B、C、D
散列算法分析:
- 如果采用线性探测的开放定址法来解决冲突(λ在0~1之间)
成功的查找,平均需要比对次数为: 1 2 ( 1 + 1 1 − λ ) \cfrac{1}{2}(1+\cfrac{1}{1 - λ}) 21(1+1−λ1)
不成功的查找,平均比对次数为: 1 2 ( 1 + ( 1 1 − λ ) 2 ) \cfrac{1}{2}(1+(\cfrac{1}{1 - λ})^2) 21(1+(1−λ1)2) - 如果采用数据链来解决冲突(λ可大于1)
成功的查找,平均需要比对次数为: 1 + 1 λ 1+\cfrac{1}{\lambda} 1+λ1
不成功的查找,平均比对次数为:λ