给定的数据为:39, 38, 12, 28, 15, 42, 44, 6, 25, 36 ,散列函数为hash(x)=x MOD 13,用线性探测法解决哈希冲突的问题,
试建立哈希表,计算出查找成功和不成功时的平均查找长度(ASL)。
解析:所谓的线性探查法是将散列表看成是一个环形表,若在地址d(即hash(k)=d)发生冲突,则依次探查下述地址单元:d+1,d+2,...,M-1,...d-1
直到找到一个空闲地址或查找到关键码为K的结点位置。
地址: 0 1 2 3 4 5 6 7 8 9 10 11 12
数据: 39 12 28 15 42 44 6 25 - - 36 - 38
成功次数: 1 3 1 2 2 1 1 9 1 1
不成功次数: 9 8 7 6 5 4 3 2 1 1 2 1 10
查找成功时的平均查找长度:ASL=(1+3+1+2+2+1+1+9+1+1)/10 =2.2
查找不成功时的平均查找长度:ASL=(9+8+7+6+5+4+3+2+1+1+2+1+10)/13=4.54
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
39 | 12 | 28 | 15 | 42 | 44 | 6 | 25 | 36 | 38 |
说明:
第n个位置不成功时的比较次数为,第n个位置到第1个没有数据位置的距离。
( 之所以是到第一个没有数据的位置是因为,
假如检索数据存在则存放位置应为取模后的值,但是如果存在冲突,则顺次向后查找第一个空的位置放入其中。然而查找不成功时,意味着带查找的值
并不在散列当中,否则,在第一个空位置之前就应该能检索到。)
至少要查询多少次才能确认没有这个值。
(1) 查询hash(x)=0,至少要查询9次遇到表值为空的时候,才能确认查询失败。
(2) 查询hash(x)=1,至少要查询8次遇到表值为空的时候,才能确认查询失败。
(3) 查询hash(x)=2,至少要查询7次遇到表值为空的时候,才能确认查询失败。
(4) 查询hash(x)=3,至少要查询6次遇到表值为空的时候,才能确认查询失败。
(5) 查询hash(x)=4,至少要查询5次遇到表值为空的时候,才能确认查询失败。
(6) 查询hash(x)=5,至少要查询4次遇到表值为空的时候,才能确认查询失败。
(7) 查询hash(x)=6,至少要查询3次遇到表值为空的时候,才能确认查询失败。
(8) 查询hash(x)=7,至少要查询2次遇到表值为空的时候,才能确认查询失败。
(9) 查询hash(x)=8,至少要查询1次遇到表值为空的时候,才能确认查询失败。
(10)查询hash(x)=9,至少要查询1次遇到表值为空的时候,才能确认查询失败。
(11)查询hash(x)=10,至少要查询2次遇到表值为空的时候,才能确认查询失败。
(12)查询hash(x)=11,至少要查询1次遇到表值为空的时候,才能确认查询失败。
(13)查询hash(x)=12,至少要查询10次遇到表值为空(循环查询顺序表)的时候,才能确认查询失败。