散列技术之哈希

给定的数据为: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次遇到表值为空(循环查询顺序表)的时候,才能确认查询失败。

 

posted @ 2013-05-31 15:49  Air Support  阅读(280)  评论(0编辑  收藏  举报