哈希表查找——成功和不成功时的平均查找长度

哈希表查找——成功和不成功时的平均查找长度

http://lib.csdn.net/article/datastructure/15569

题目

例子:(2010年全国硕士研究生入学统一考试计算机科学与技术学科联考计算机学科专业基础综合试题第一题)
将关键字序列(7、8、30、11、18、9、14)散列存储到散列表中。散列表的存储空间是一个下标从0开始的一维数组。散列函数为: H(key) = (keyx3) MOD 7,处理冲突采用线性探测再散列法,要求装填(载)因子为0.7。

(1) 请画出所构造的散列表;

(2) 分别计算等概率情况下查找成功和查找不成功的平均查找长度。

 

1.散列表:

α = 表中填入的记录数/哈希表长度    ==> 哈希表长度 = 7/0.7 = 10

H(7) = (7x3)MOD 7 = 0      H(8) = (8x3) MOD 7 =3     H(30) = (30x3) MOD 7 = 6

H(11) = (11x3)MOD 7 = 5    H(18) = (18x3) MOD 7 =5    H(9) = (9x3) MOD 7 = 6

H(14) = (14x3)MOD 7 = 0

按关键字序列顺序依次向哈希表中填入,发生冲突后按照“线性探测”探测到第一个空位置填入。


2.查找长度:

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

      (待查找的数字肯定在散列表中才会查找成功)

查找数字A的长度 = 需要和散列表中的数比较的次数;

步骤:

                比如 查找数字:8

                则  H(8) = (8x3) MOD 7 = 3

                哈希表中地址3处的数字为8,进行了第一次比较:8 =8,则查找成功,查找长度为1;

比如查找数字:14

                则 H(14) = (14x3) MOD7 = 0

                哈希表中地址0处的数字为7,进行第一次比较:7≠14

                哈希表中地址1处的数字为14,进行第二次比较:14=14,则查找成功,查找长度为2。                            

由此可得到如下数据:


所以总的查找成功的平均查找长度= (1+1+1+1+3+3+2)/7 = 12/7

 

2.2查找不成功的平均查找长度

(待查找的数字肯定不在散列表中)   

【解题的关键之处】根据哈希函数地址为MOD7,因此任何一个数经散列函数计算以后的初始地址只可能在0~6的位置

查找0~6位置查找失败的查找次数为:

地址0,到第一个关键字为空的地址2需要比较3次,因此查找不成功的次数为3.     

地址1,到第一个关键字为空的地址2需要比较2次,因此查找不成功的次数为2.

地址2,到第一个关键字为空的地址2需要比较1次,因此查找不成功的次数为1.

地址3,到第一个关键字为空的地址4需要比较2次,因此查找不成功的次数为2.

地址4,到第一个关键字为空的地址4需要比较1次,因此查找不成功的次数为1.

地址5,到第一个关键字为空的地址2(比较到地址6,再循环回去)需要比较5次,因此查找不成功的次数为5.

地址6,到第一个关键字为空的地址2(比较到地址6,再循环回去)需要比较4次,因此查找不成功的次数为4.

于是得到如下数据:



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值