哈希表的查找成功的长度和查找不成功的长度(详细讲解)

线性探测法:

例题:

采用哈希函数H(k)=3*k mod 13并用线性探测开放地址法处理冲突,在数列地址空间[0..12]中对关键字序列22,41,53,46,30,13,1,67,51

(1)构造哈希表(画示意图);

(2)装填因子;等概率下

(3)成功的和不成功的平均查找长度

答:(1)

散列地址 0 1 2 3 4 5 6 7 8 9 10 11 12
关键字 13 22 53 1 41 67 46 51 30
比较次数 1 1 1 2 1 2 1 1 1

(2)装填因子:a=n/m 其中n 为关键字个数,m为表长

a=9/13

(3)查找成功的平均查找长度:每个关键字的比较次数之和/关键字的个数(即表中元素的个数)

ASL=(7+2*2)/9=11/9

查找不成功的平均查找长度:比如:查找26,即一开始找到散列地址为0,然后对比关键字后不相等,按照线性探测法向后查找,直到有一个散列地址的关键字为空,则确认查找失败;

查找不成功的平均查找长度就是表中的每个散列地址的比较次数/表长

注意:在最后的散列地址中,如果没有空,就比如该题中的散列地址12,还要往后找,则到了0-->1-->2,总共比较了4次。

1.散列地址为0,从0-->1-->2,比较了3次

2.散列地址为1,从1-->2,比较了2次

3.散列地址为2,关键字为空,比较了1次

4.散列地址为3,从3-->4-->5,比较了3次

5.散列地址为4,从4-->5,比较了2次

6.散列地址为5,关键字为空,比较了1次

7.散列地址为6,从6-->7-->8-->9,比较了4次

8.散列地址为7,从7-->8-->9,比较了3次

9.散列地址为8,从8->9,比较了2次

10.散列地址为9,关键字为空,比较了1次

11.散列地址为10,从10-->11,比较了2次

12.散列地址为11,关键字为空,比较了1次

13.散列地址为12,从12-->0-->1-->2,比较了4次

所以ASL=(3+2+1+3+2+1+4+3+2+1+2+1+4)/13=29/13

链地址法:

例题:

采用哈希函数H(k)=2*k mod 13并用链地址法处理冲突,在数列地址空间[0..12]中对关键字序列22,41,53,46,30,13,1,67,51进行下列工作:

(1)构造哈希表(画示意图);

(2)等概率下成功的和不成功的平均查找长度。

答:(1)

0

13

^

1

46

^

2

53

1

^

3

^

4

41

67

^

5

22

^

6

^

7

^

8

30

^

9

^

10

^

11

51

^

12

^

(2)查找成功的平均查找长度:

ASL=(7*1+2*2)/9=11/9

查找不成功的平均查找长度:(不算关键字空的散列地址的比较次数)

ASL=(5+4)/13=9/13

总结:算查找成功的平均查找长度时除以的是表中元素的个数

查找不成功的平均查找长度时除以的是表的长度

你可能感兴趣的:(散列表,数据结构,哈希算法)