散列查找(哈希查找)

散列函数key  mod  p

1.线性探测法处理冲突

如果当前位置已经有元素了,就看下一个位置有没有元素,直到找到一个位置没有元素

找到一个元素需要几次?

例题:关键码集为{47,7,29,11,16,92,22,8,3},散列表表长为11,散列函数为Hash(key)=key mod 11,拟用线性探测法处理冲突,要找到3这个元素,需要查找几次?

47%11=4......3

7%11=0......7

29%11=2......7

11%11=1......0

16%11=1......5

92%11=8......4

22%11=2......0

8%11=0......3

3%11=0......3

012345678910
112247921687293

3%11=0......3,所以先在3这个位置中查找,然后去第4个位置找,然后去第5个位置找..........

所以一共查找了7次

查找成功的平均查找长度

(2018 408)现有长度为7的散列表,散列函数为Hash(key)=key mod 7,用线性探测法解决冲突,将关键字22,43,15依次插入到散列表中,查找成功的平均查找长度是()

A.1.5       B.1.6       C.2      D.3

22%7=3......1

43%7=6......1

15%7=2......1

0123456
224315

22查找1次就可以查找到

43需要查找2次才可以查找到

15需要查找3次可以查找到

所以平均查找次数是(1+2+3)/3=2,选c

查找失败的平均查找次数

  一直查找, 直到碰到某个位置为空,不再查了         

(2019 408) 现有长度为11的散列表,散列函数Hash(key)=key mod   采用线性探测法解决冲突。将关键字序列87,40,30,6,11,22,98,20依次插入散列表后,散列表查找失败的平均查找长度(   )

A.4       B.5.25      C.6     D.6.29

构建散列表的过程略过:

012345678910
982230871140620

当你给1个数x,x不在散列表中:

当x mod  7=0,从0这个位置开始查找,一直查到8这个位置发现是空的,才停止查找,一共查了9次

当x mod  7=1,从1这个位置开始查找,一直查到8这个位置发现是空的,才停止查找,一共查了8次

当x mod  7=2,从2这个位置开始查找,一直查到8这个位置发现是空的,才停止查找,一共查了7次

................

当x mod  7=5,从5这个位置开始查找,一直查到8这个位置发现是空的,才停止查找,一共查了4次

当x mod  7=6,从6这个位置开始查找,一直查到8这个位置发现是空的,才停止查找,一共查了3次

所以失败的平均查找长度为:

(9+8+7+6+5+4+3)/ 7=42/7=6

2.采用链地址法解决冲突

一组关键字{26,36,41,38,44,15,68,12,6,51,25},用链地址法解决冲突,散列表长度为15,散列函数为Hash(key)=key%13

计算等概率情况下查找成功和查找失败的平均查找长度

查找成功的平均查找长度:

(1*7+2*2+3*1+4*1)/11=18/11

查找失败的平均查找长度: 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值