已知散列表长度为13,散列函数为H(key)=key % 11,处理冲突的方法为线性探测法,请画出依次插入关键字(10,8,40,27,21,57,46,23,19,56)以后的散列表,并计算查找成功和不成功时的平均查找长度。
解:散列表是哈希表的另一种叫法,散列函数为H(key)=key % 11用的是除留余数法,线性探测法就是当遇到冲突时,H(key)=(key+d )% 11,key为关键字,若还是遇到冲突,D(i)=(H(key)+(i) )% 11,依次往下去,直到地址不冲突,若一直没找到,查找失败。可取d=1.
10%11=10 将10放A[10];
8%11=8 将8放A[8];
40%11=7 将40放A[7];
27%11=5 将27放A[5];
21%11=10 因为A[10]已被占用,遇到冲突,使用线性探测法,D(1)=(10+1 )% 11=0,A[0]没被占用,将21放A[0];
57%11=2 将57放A[2];
46%11=2 因为A[2]已被占用,遇到冲突,使用线性探测法,D(1)=(2+1 )% 11=3,A[3]没被占用,将46放A[3];
23%11=1 将23放A[1];
19%11=8 因为A[8]已被占用,遇到冲突,使用线性探测法,D(1)=(8+1 )% 11=9,A[9]没被占用,将19放A[9];
56%11=1 因为A[1]已被占用,遇到冲突,使用线性探测法,D(1)=(1+1 )% 11=2,A[2]被占用,D(2)=(1+2 )% 11=3,A[3]被占用,D(3)=(1+3 )% 11=4,将56放A[4];
成功查找的平均长度=查找次数总和/关键字总个数=(6*1+3*2+4)/10=1.6
第n个位置不成功时的比较次数为,第n个位置到第1个没有数据位置的距离.
不成功查找的平均长度=不成功总次数/表的长度=(7+6+5+4+3+2+1+5+4+3+2+1+1)/13=3.38.
地址 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
关键字 | 21 | 23 | 57 | 46 | 56 | 27 | 40 | 8 | 19 | 10 | |||
成功查找次数 | 2 | 1 | 1 | 2 | 4 | 1 | 1 | 1 | 2 | 1 | |||
不成功查找次数 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 5 | 4 | 3 | 2 | 1 | 1 |