哈希表习题

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

                                                                               线性探测散列法

012345678910
22 4130153461367  
1 1221126  

 

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

                                                                                   二次探测再散列法

012345678910
22 41301534613  67
1 122112  5

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  ,此时冲突,【根据1^2,-(1^2),2^2,-(2^2)……n^2,-(n^2)处理冲突】

找到位置4,已经有元素,然后向左,找到位置2,也已经有元素

然后向右,位置3+4,为位置7,也已经有元素,向左,从3位置往左数4个位置【注:到达0位置继续从最后一个元素由右往左遍历,到位置10】

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

查找长度填入第三行。

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

补充:

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

(1)线性探测散列法

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

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

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

(2)二次探测再散列法

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

②二次探测再散列法出现冲突时的处理方式为【1^2,-(1^2),2^2,-(2^2)……n^2,-(n^2)处理冲突】,如元素67,取模运算得到为3,出现冲突,依次查找【3,4,2,7,-1……直到找到空位置位置放入即可】。

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

  • 9
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mez_Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值