hash 表在处理 collision 的时候有很多种方式,比如 线性探测(linear probing)、二次探测(quadratic probing)、开链法(seperate chaning) 等。
  本文记录使用开链法的情况下,Hash 表查找成功和查找不成功的平均查找长度(ASL),其他方法同理。
  首先开链法是指,每一个表格元素维护一个list,hash function 为我们分配某一个 list,然后在哪个对应的 list 上执行元素的插入、搜寻、删除等操作,虽然针对 list 进行的搜索只能是一种线性操作,但是如果 list 够短,速度还是很快的。

一、查找成功时,平均查找长度

查找成功时的平均查找长度 = 表中每个元素查找成功时的比较次数之和 / 表中元素个数;

  使用以下关键字建立哈希表 { 19, 13, 20, 21, 23, 27, 26, 30, 50 },哈希表长度为 10,hash function 为 H(K) = K % 10,并且使用链地址法(就是开链法)解决冲突,则等概率下查找成功的平均查找长度为()?
  首先就是按照题意进行 hash 表的构建,构建玩应该如下图:

存放元素 50
30
20

23
13

26

27

19

hash表索引 0 1 2 3 4 5 6 7 8 9

  可以看到,查找一个元素,最少需要一次,最多需要三次,那么查找成功时的平均查找长度为:

( 1 * 5 + 2 * 2 + 3 * 1 ) / 9 = 4 / 3

  其中,1 * 5 表示,比较一次就可以查找到的元素有 5 个(20, 13, 26, 27, 19),同理 2 * 2 表示比较两次的元素有 2 个(30, 23),3 * 1 表示比较三次的元素有 1 个(50),最后除以 9 也就是哈希表中的元素个数,就是查找成功时,平均查找长度 4 / 3。

二、查找不成功时,平均查找长度

查找不成功时的平均查找长度 = 表中每个位置查找不成功时的比较次数之和 / 表中位置数(即表长度);

  查找不成功,也就是查找一个元素,发现没有在哈希表中,那么就是对于 hash 表中的每一个位置,看比较多少次能判断出这个数不在哈希表中。显而易见,开链法下,list 为空的 bucket 位置,就是不需要比较,因为没有东西,说明要查的数不在哈希表中,同理,list 长度就是查找不成功时,每个位置的查找长度

存放元素 50
30
20

23
13

26

27

19

hash表索引 0 1 2 3 4 5 6 7 8 9

  还是用上边的例子,这个哈希表的查找不成功时,平均查找长度就是:

( 3 + 0 + 0 + 2 + 0 + 0 + 1 + 1 + 0 + 1 ) / 10 = (3 + 2 + 1 + 1 + 1) / 10 = 8 / 10 = 4 / 5

  注意查找成功和不成功联两种情况下,ASL 计算时,分母是不一样的!

【hash表】hash表平均查找长度(ASL)相关推荐

  1. 数据结构:二叉查找树 BST 平均查找长度 ASL 的计算

    平均查找长度 ASL(Average Search Length),即平均查找长度,在查找运算中,由于所费时间在关键字的比较上,所以把平均需要和待查找值比较的关键字次数称为平均查找长度. 它的定义是这 ...

  2. 数据结构---平均查找长度ASL的相关计算技巧

    个人总结的有关考研数据结构中平均查找长度ASL的三种计算小技巧: 顺序查找法的平均查找长度为:(n+1)/2 散列表的查找成功和查找不成功的平均查找长度 技巧(线性探测法和链地址法): ① 查找成功时 ...

  3. hash表的平均查找长度C语言,关于ASL(平均查找长度)的简单总结

    ASL(Average Search Length),即平均查找长度,在查找运算中,由于所费时间在关键字的比较上,所以把平均需要和待查找值比较的关键字次数成为平均查找长度. 它的定义是这样的: 其中n ...

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

    哈希表查找--成功和不成功时的平均查找长度 以下求解过程是按照"计算机统考的计算方法",不同的老师.教材在"处理冲突"上可能会有不同的方法,所以最主要的是掌握原 ...

  5. 数据结构几种平均查找长度

    数据结构几种平均查找长度 总结的有关数据结构中平均查找长度ASL的三种计算小技巧: 1.顺序查找法的平均查找长度为:(n+1)/2 2.散列表的查找成功和查找不成功的平均查找长度 技巧(线性探测法和链 ...

  6. 二叉排序树的平均查找长度(成功不成功)

    二叉排序树的平均查找长度 上图所示为二叉排序树 查找成功时的平均查找长度: ASL=∑(本层高度*本层元素结点个数)/结点总数 =(1 * 1 +2 * 2+3 * 2)=11/5 查找失败时的平均查 ...

  7. Hash表查找成功和查找不成功的平均查找长度(附总结)

    Hash表的平均查找长度包括查找成功时的平均查找长度和查找失败时的平均查找长度. 查找成功时的平均查找长度=表中每个元素查找成功时的比较次数之和/表中元素个数: 查找不成功时的平均查找长度相当于在表中 ...

  8. 【数据结构和算法笔记】线性表的查找(平均查找长度,二分法,判定树)

    查找: 给定一个值k,在含有n个元素的表中找出关键字等于k的元素,若找到,则查找成功,否则,查找失败 查找前首先确定(1)存放数据的数据结构是什么(2)元素是否有序 动态查找表:查找的同时做修改操作( ...

  9. 哈希表:线性探测法和链地址法求查找成功与不成功的平均查找长度

    哈希表:线性探测法和链地址法求查找成功与不成功的平均查找长度 了解ASL的公式 线性探测法求ASL 链地址法求ASL 了解ASL的公式 查找成功时:ASL =1n\frac{1}{n}n1​ ∑i=1 ...

最新文章

  1. 深度强化学习为什么在实际当中用的比较少 ?
  2. 数据格式、类型系统与展示
  3. 不出家门也能喝上原汁原味的泰国国汤——冬阴功汤
  4. 共享上网 路由器设置图解
  5. 如何诊断ORA-125XX连接问题
  6. linux服务器选ubantu或centos_如何通过SSH连接阿里云上的Linux系统
  7. 北师大计算机组成原理离线作业,北师大网络教育 离线作业 计算机组成原理(一、二、三)...
  8. 白鹭引擎生成自定义整数随机数
  9. thinkphppaginate.php,thinkphp如何使用paginate及其参数示例使用
  10. 层次分析法模型(数学建模学习)
  11. 不想做外包,当不了药神,AI公司如何才能走通制药这条路?
  12. c++实现tailf命令
  13. 软件license授权加、解密,软件注册工具(2)
  14. 程序员的工资是不是太高了?真相让人心疼
  15. Parallel使用
  16. mac 更新系统后 idea 意外退出
  17. OpenAI又放大招:连接文本与图像的CLIP,在ImageNet上效果媲美ResNet50
  18. 中国传媒大学计算机课程表,中国传媒大学新闻学院课程表.doc
  19. 分享一些实用的手机应用
  20. 数据科学的原理与技巧 四、数据清理

热门文章

  1. 开关电源:纹波与噪声
  2. 苹果画画软件_电容笔哪种好,普通的电容笔和苹果电容笔有什么不同?
  3. Android 12 新APP启动画面(SplashScreen API)简介源码分析
  4. 如何利用AS弹性伸缩应对业务需求变化
  5. 2020年薪30W的Java程序员都要求熟悉JVM与性能调优!
  6. html判断地址是否相等,如何用JS判断字符串是否相等
  7. c语言读取词法并显示坐标,完整版)词法分析器(c语言实现
  8. PO系列之 Integration Builder集成生成器中的Party伙伴功能
  9. 无线通信网络学习之E-UTRAN与EPC篇(20141209)
  10. 离开平台,你真的什么都不是?