最近复习数据结构中的哈希表,发现在计算等概率情况下查找不成功的平均查找长度时不太理解,不知道到底是怎么计算出来的。看了几篇博客后终于知道如何计算了,总结如下。

例题:

将关键字序列(7、8、30、11、18、9、14)散列存储到散列表中。散列表的存储空间是一个下标从0开始的一维数组,散列函数为: H(key) = (keyx3) MOD 7,处理冲突采用线性探测再散列法,要求装填(载)因子为0.7。

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

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

(1)首先明确一个概念:装载因子。装载因子是指所有关键子填充哈希表后饱和的程度,它等于 填入表中的关键字总数/哈希表的长度

根据题意,我们可以确定哈希表的长度为 L = 7/0.7 = 10;因此此题需要构建的哈希表是下标为0~9的一维数组。

这里采用线性探测再散列法处理冲突,构造散列表。

H(7) = (7x3) MOD 7 = 0,地址为0,因此放到散列表的数组下表为0的位置,这个位置上没有关键字,因此没有冲突可以直接填入;

H(8) = (8x3) MOD 7 = 3,地址是3,因此放到散列表的数组下表为3的位置,这个位置上没有关键字,因此没有冲突可以直接填入;

H(30) = (30x3) MOD 7 = 6,地址是6,因此放到散列表的数组下表为6的位置,这个位置上没有关键字,因此没有冲突可以直接填入;

H(11) = (11x3) MOD 7 = 5,地址是5,因此放到散列表的数组下表为5的位置,这个位置上没有关键字,因此没有冲突可以直接填入;

H(18) = (18x3) MOD 7 = 5,地址是5,因此放到散列表的数组下表为5的位置,但这个位置上已经有关键字11,遇到了冲突,此时我们根据线性探测再散列法来处理这个冲突,探测下一个位置6,6这个位置上已经存在关键字30则继续增加1,因此现在的新地址应为7,位置7上没有关键字,放入即可,到此冲突已经解决;

H(9) = (9x3) MOD 7 = 6,地址是6,因此放到散列表的数组下表为6的位置,但这个位置上已经有关键字30,遇到了冲突,探测下一个位置7,7这个位置上已经存在关键字18则继续增加1,因此现在的新地址应为8,位置8上没有关键字,放入即可;

H(14) = (14x3) MOD 7 = 0,地址是0,因此放到散列表的数组下表为0的位置,但这个位置上已经有关键字7,遇到了冲突,探测下一个位置1,位置1上没有关键字,放入即可;

到这一步所有关键字均已填入,散列表已经构造完成,如下表所示。

地址 0 1 2 3 4 5 6 7 8 9
关键字 7 14 8 11 30 18 9

(2)等概率情况下查找成功平均查找长度:

这一问可以根据第一问的构造过程求解:

key7 一次就填入了表中,因此查找次数为1,同理8, 30, 11查找次数均为1;

key18 进行了三次探测操作,探测位置分别是5,6,7 ,因此查找次数为3;

key9 也是三次;

key14 进行了两次探测,因此查找次数为2。次数如下表所示:

地址 0 1 2 3 4 5 6 7 8 9
关键字 7 14 8 11 30 18 9
成功次数 1 2 1 1 1 3 3

所以ASLsuccess= (1+2+1+1+1+3+3)/ 7 = 12/7。

接下来讨论不成功的情况,计算查找不成功的次数就直接找关键字到下一个地址关键字为空的距离即可,但根据散列函数地址为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,到第三个关键字为空的地址9的距离为5,因此查找不成功的次数为5;

地址6,到第三个关键字为空的地址9的距离为4,因此查找不成功的次数为4;

注意地址7、8、9不用看。

因此查找不成功的次数表如下表所示:

地址 0 1 2 3 4 5 6 7 8 9
关键字 7 14 8 11 30 18 9
失败次数 3 2 1 2 1 5 4

所以ASLunsuccess= (3+2+1+2+1+5+4)/ 7 = 18/7。

哈希表查找——等概率情况下查找成功和查找不成功的平均查找长度的计算相关推荐

  1. 哈希表等概率情况下查找成功和查找不成功的平均查找长度的计算

    最近复习了下数据结构中的哈希表,发现在计算等概率情况下查找不成功的平均查找长度时比较迷茫,不知道到底是怎么计算出来的.现在通过查阅资料终于知道如何计算了,所以记录下来以供以后查阅. 下面看下2010年 ...

  2. 使用哈希函数:H(k)=3k MOD 11,并采用链地址法处理冲突。试对关键字序列(22,41,53,46,30,13,01,67)构造哈希表,求等概率情况下查找成功的查找长度,并设计构造哈希表

    使用哈希函数:H(k)=3k MOD 11 ,并采用链地址法处理冲突. 试对关键字序列(22,41,53,46,30,13,01,67)构造哈希表, 求等概率情况下查找成功的查找长度,并设计构造哈希表 ...

  3. 等概率情况下查找成功时的平均查找长度

    4.设散列表的地址范围为0-17,散列函数为:H(K)=K MOD 13,K为关键字.用线性探测法处理冲突,输入关键字序列:(10,24,32,17,31,30,46,47,40,63,49),完成以 ...

  4. 如何在注册表被锁定的情况下修复注册表

    如何在注册表被锁定的情况下修复注册表          注册表被锁定这一招是比较恶毒的,它使普遍用户即使会简单修改注册表使其恢复的条件下,困难又多了一层.症状是在开始菜单中点击"运行&quo ...

  5. BM算法的shift1表是在所有情况下移动都是最快的吗?

     Shift1表并不是所有的情况下都是移动最快的,比如如下的文本字符串和搜索字符串,当比 较到上图所示位置的时候发现I和A不匹配,按照shift1的方式,应该移动3位,如下图所示, 但是移动3位并 ...

  6. 哈希表(等概率下)平均查找长度(转)

    http://www.cnblogs.com/wangaohui/archive/2012/12/16/2820974.html 转载于:https://www.cnblogs.com/kangpp/ ...

  7. mysql回表_到底什么情况下mysql innodb会发生回表操作?

    谢邀 MySQL innodb的主键索引是簇集索引,也就是索引的叶子节点存的是整个单条记录的所有字段值,不是主键索引的就是非簇集索引,非簇集索引的叶子节点存的是主键字段的值.回表是什么意思?就是你执行 ...

  8. 【ORACLE】dmp格式导入导出,表没有数据的情况下,该表导入会缺失

    使用过oralce很多种导入导出的方式,pde,sql(导出不支持blog格式),dmp格式,觉得.dmp最为方便,可以导出所有的表结构.数据.SEQ及存储过程等,下面就开始具体流程,并说明到如果表中 ...

  9. Win11亮度无法调节解决方法(在卸载驱动,关闭自适应亮度和修改注册表都行不通的情况下)

    把独显直连关掉就行 (修好兄弟的电脑修到血压高,卸载核显驱动没用,想改注册表结果目标文件找不到,想关闭自适应亮度结果也没这选项,倒是尝试卸载独显驱动的时候发现了猫腻)

最新文章

  1. 出身清华,大神朱俊彦再出GauGAN:AI让你变身神笔马良
  2. 开会迟到,代码不规范,晚上八点半去健身,跟leader坐电梯自己先出去!某新入行程序员被疯狂吐槽!...
  3. hdu 4493 Tutor 水题
  4. 两次结果的绝对差值_多图示例:如何呈现论文结果中的各种图表
  5. linux下如何修改weblogic console登陆的用户名和密码
  6. Qt中定时器使用的两种方法
  7. 通过×××路由器实现跨网段访问
  8. firefox 4b7截图
  9. oracle 误删表空间文件启动不了数据库的解决办法
  10. 自学Web前端有哪些误区?自学Web需要掌握哪些技术
  11. day 03 剑指 Offer 10- I. 斐波那契数列-动态规划
  12. 精美网站登录界面 php,window_教你自己做xp精美登录界面,    一、在你的电脑 - phpStudy...
  13. 想学一门技术,学java有前途吗?
  14. CCF-CSP 新生必读
  15. 计算机函数sumif求平均值,EXCEL的经典函数sumif的用法和实例(详细汇总)_excel函数_office之家...
  16. 不带搜索框,数据同步请求,产品按字母分组组件
  17. 微信小程序请求头header_微信小程序开发:http请求
  18. 【JS】JSON.stringify( )
  19. 维基解密:CIA早就可以轻易入侵苹果手机和电脑
  20. Android Studio Flavors详解

热门文章

  1. Excel数据分析实例—牛油果销售分析
  2. 装修后才知道的一些事,无数RMB砸出来的经验 [转贴]
  3. 如何leader一个团队学习英语之BILL培训重现
  4. python中info的功能_在python中,模块对象的info属性包含什么?
  5. 如何清除DNS缓存,使用cmd命令清理DNS缓存方法
  6. Mad Libs游戏
  7. Modbus通信协议详解
  8. python123练习5: 函数和代码复用 (第5周)
  9. 误码率SER和误比特率BER的关系
  10. 基于TAITherm软件的锂离子电池热失控仿真