8、现有长度为11且初始为空的散列表HT,散列函数是H(key) = key %7,采用线性探查(线性探测再散列)法解决冲突将关键字序列87,40,30, 6,11,22,98,20依次插入到HT后,HT查找失败的平均查找长度是
A. 4 B.5.25 C.6 D.6.29
解析:
1、什么是散列表?
哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。
2、算出关键字的存储位置
散列函数是H(key) = key % 7
1、创建一个长度为11且初始值为空的散列表
创建一个0~10的数组,并根据散列函数算出的值把对应的关键字放到数组中。
当放入关键字20的时候,20的地址为6,发现在地址为6的位置上已经有了其他关键字,我们把这种情况叫做产生了冲突。
1、怎么解决这种冲突呢?
题中让我们用线性探测法来解决这种冲突。
什么是线性探测法?
就是当遇到冲突的时候,试探下一个相邻的位置是否有关键字的存在,没有即放入,如果下一个位置还有,那继续试探下一个位置,直到找到没有放入关键字的位置,并放入。
2、计算查找失败的平均查找长度
根据H(key) = key % 7 可知,任何关键字在散列表中的位置只能是 0~6。
那查找失败的步长就为关键字位置距离第一个地址上关键字为空的距离
所以总的失败步长为:
9 + 8 + 7 + 6 + 5 + 4 + 3 = 42
平均:42 / 7 = 6
所以答案为:C