哈希表习题

选取哈希函数H(k)=(3k)%11,用线性探测散列法和二次探测再散列法分别处理冲突。试在0~10的散列地址空间中,对关键字序列(22,41,53,46,30,13,01,67)构建哈希表,并求等概率情况下查找成功的平均查找长度。

                                                                               线性探测散列法

0 1 2 3 4 5 6 7 8 9 10
22   41 30 1 53 46 13 67    
1   1 2 2 1 1 2 6    

 

22*3%11=0

41*3%11=2

53*3%11=5

46*3%11=6

30*3%11=2

13*3%11=6

1*3%11=3

67*3%11=3

然后使用线性探测散列法将数据填入表中(第二行),

查找长度填入第三行。

然后计算ASL=(1+1+2+2+1+1+2+6)/8=2

                                                                                   二次探测再散列法

0 1 2 3 4 5 6 7 8 9 10
22 67 41 30 1 53 46 13      
1 5 1 2 2 1 1 2      

22*3%11=0

41*3%11=2

53*3%11=5

46*3%11=6

30*3%11=2

13*3%11=6

1*3%11=3

67*3%11=3

然后使用二次探测再散列法将数据填入表中(第二行),

查找长度填入第三行。

计算ASL=(1+5+1+2+2+1+1+2)/8=1.875

补充:

下面说一下这两个处理冲突的方法

(1)线性探测散列法

①根据哈希函数计算函数值(%表示取余计算)

②线性探测散列法就是在取余计算后的第一次计算出的值直接填入对应序列即可(如计算结果为3,就直接填入3号位),如果第二次出现甚至多次出现相同计算取余后的函数值,就依次往后移动,移动到没有函数值的位置上。(如第二次出现3,就看4号位有没有函数值,没有就直接填入,有就继续往后移动,更多次也是同理)

③根据移动次数填入查找长度,直接填入的为1,然后后面的为1+移动次数为查找长度。

(2)二次探测再散列法

①根据哈希函数计算函数值(%表示取余计算)

②二次探测再散列法与线性探测散列法的不同就是在移动方式的不同,二次探测再散列法是先右后左的顺序,如第二次3的位置,填入4号位置,第三次3的位置,填入2号位置,第四次3的位置,填入5号位置,第五次3的位置,填入1号位置……

③根据移动次数填入查找长度,直接填入的为1,然后后面的为1+移动次数为查找长度。也是一样,右移一次+1,左移一次也+1。

你可能感兴趣的:(数据结构与算法)