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. python嵩天课后思考题_Python语言程序设计基础(第二版)嵩天等课后习题答案
  2. 小鹏高管:高速自动驾驶明年实现量产
  3. unity2019,打包APK时的gradle错误问题
  4. Tencent JDK 国产化CPU架构支持分享
  5. ovirt官方安装文档 第三章
  6. Acwing 1082. 数字游戏
  7. java 获取oracle mysql sqlserver 链接 connection
  8. lateral函数oracle,ORACLE LATERAL-SQL-INJECTION 个人见解
  9. html之CSS设计(文本、边框、列表标签、display设置、内外边距)
  10. 使用sql语句向SDO_Geometry插入要素
  11. 8岁小学生表白遭拒:被一部iPhone打败
  12. 什么是生命,这取决于肝脏。——《调音师》影评
  13. mybatis配置sql超时时间
  14. Chrome firefox ie等浏览器空格nbsp;宽度不一样
  15. python可以代替按键精灵吗_Python 假装自己是按键精灵
  16. knockoutjs
  17. Latex表格内容自动换行
  18. CSS实现旋转木马效果
  19. Intel VT-d(1)- 简介
  20. java 计算年龄_Java根据日期计算年龄——精确到天

热门文章

  1. Android github上开源项目集合
  2. 接口自动化框架之python pytest-mark(三)
  3. java反射 setAccess,Java反射 - setAccessible的影响(真)Java反射 - setAccessib
  4. Python数据可视化--Matplotlib
  5. STM32开发(1)----stm32f103c6t6开发板介绍和环境搭建
  6. c4d怎么导入fbx_如何将3DMAX模型带材质导入C4D
  7. 京东:基于多类目MoE模型的电商搜索引擎
  8. Web-Crawler(爬虫基础)
  9. 用 Node.js 写一个多人游戏服务器引擎
  10. 作为一个Java程序员,javaweb教程视频教程百度云