查找算法【哈希表】 - 散列查找及性能分析

散列表虽然建立了关键字和存储位置之间的直接映像,但冲突不可避免,在散列表的查找过程中,有的关键字可以通过直接定址1次比较找到,有的关键字可能仍然需要和若干关键字比较,查找不同关键字的比较次数不同,

因此散列表的查找效率通过平均查找长度衡量。其查找效率取决于3个因素:

  • 散列函数
  • 装填因子
  • 处理冲突的方法。

【散列函数】

衡量散列函数好坏的标准是:简单、均匀。

即散列函数计算简单,可以将关键字均匀地映射到散列表中,避免大量关键字聚集在一个地方,发生冲突的可能性就小。

【装填因子】

散列表的装填因子如下:

装填因子反映散列表的装满程度

  • α 越小,发生冲突的可能性越小;
  • 反之,α 越大,发生冲突的可能性越大。

例如,在散列表中填入的记录数为12,表长为15,则装填因子α =12/15=0.8;如果装入的记录数为3,则装填因子α =3/15=0.2。在表长为15的情况下,只装入3个记录,那么发生冲突的可能性大大降低。但是装填因子过小也会造成空间浪费。

【处理冲突的方法】

采用散列表处理冲突的方法不同,其平均查找长度的数学期望也不同,如下表所示。

上表中查找成功和查找失败的平均查找长度是数学期望下的值,从数学期望结果可以看出,散列表的平均查找长度与装填因子有关,与关键字个数无关。不管关键字个数n 有多大,都可以选择一个合适的装填因子,将平均查找长度限定在一个可接受的范围内。

【注意】针对具体的关键字序列,对其查找成功和查找失败的平均查找长度都不可以采用此数学期望公式计算。

在查找概率均等的前提下,通过以下公式计算查找成功和查找失败的平均查找长度。

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

其中,n 为关键字个数,ci 为第i 个关键字查找成功时所需的比较次数。

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

其中,r 为散列函数映射地址的个数,ci 为映射地址为i 时查找失败的比较次数。

例如,hash(key)=key mod 13,那么散列函数的映射地址为0~12,共有13个,r =13。

计算查找失败的比较次数时,不管是采用线性探测法、二次探测法,还是采用链地址法,遇到空才会停止,空也算作一次比较。

查找算法【哈希表】 - 散列查找及性能分析相关推荐

  1. C++--哈希表--散列--冲突--哈希闭散列模拟实现--问答--1107

    1.哈希 概念 可以不经过任何比较,直接从表中得到要搜索的元素. 关键在于通过某种散列函数,使元素的存储位置与它的关键码之间能够建立 一一映射的关系.这样就可以通过o(1)的时间复杂度来寻找到元素. ...

  2. 手撸数据结构之线性链表---哈希表(散列) Hash

    哈希数据结构 哈希表的存在是为了解决能通过O(1)时间复杂度直接索引到指定元素. 这是什么意思呢?通过我们使用数组存放元素,都是按照顺序存放的,当需要获取某个元素的时候,则需要对数组进行遍历,获取到指 ...

  3. 算法小讲堂之哈希表|散列表|考研笔记

    文章目录 一. 基本概念 二. 哈希函数|散列函数 2.1 直接定址法 2.2 保留余数法 2.3 数字分析法 2.4 平方取中法 2.5 折叠法 2.6 随机数法 三.冲突处理 3.1 开放定址法 ...

  4. “查找”学习提纲(二)——树型查找和散列查找

    文章目录 前言 代码模板 二叉排序/查找/搜索树查找 适用 性能 代码模板 折半查找和二叉排序树查找总结 平衡二叉(排序)树/AVL树 构造相应层数的树至少需要的结点数 平衡调整的过程 平衡调整的类型 ...

  5. 数据结构与算法——哈希表

    哈希表 看一个实际需求,google公司的一个上机题: 有一个公司,当有新的员工来报道时,要求将该员工的信息加入(id,性别,年龄,住址-)当输入该员工的id时,要求查找到该员工的所有信息. 要求: ...

  6. 数据结构与算法 ~ 查找 ~ 散列查找(哈希~线性探查法和二次探查法)

    数据结构与算法 ~ 查找 ~ 散列查找(哈希~线性探查法和二次探查法) /*search-hash*/ #include<math.h> #include<stdio.h> # ...

  7. 哈希表(散列查找)(c/c++)

    通过哈希表进行查找的特点是:不需要比较关键字,而是通过哈希函数计算出关键字的位置.一般来讲,为了进行高效率的查找,要求哈希函数简单均匀.空间利用率高.关键字之间的冲突少. 关于散列查找的实现需要着重考 ...

  8. 散列查找 散列表(哈希表)

    哈希表的平均查找长度是()的函数. A.哈希表的长度 B.哈希表的装填因子 C.哈希函数 D.表中元素的多少 装填因子 = 关键字个数 / 表长 符号表:是 "名字(Name)–属性(Att ...

  9. 查找 之 散列表查找(哈希表)

    基础概念 散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key).这里对应关系f称为散列函数,又称为哈希(Hash)函数. 采用散列技术将 ...

最新文章

  1. SQL语句中不同的连接JOIN
  2. oracle rac添加监听,【学习笔记】Oracle 10G RAC增加节点时手动注册监听服务的案例步骤...
  3. .NET开发者常会忽略的几个错误
  4. R 指定安装镜像的方法
  5. 理解和使用 Unity UI 系统(canvas和CanvasScaler )
  6. 【转】MySql常用函数大全
  7. ES6、7学习笔记(尚硅谷)-8-三点运算符
  8. w ndows7旗舰版怎么重装系统,windows7旗舰版怎么重装系统|怎么重装系统windows7旗舰版...
  9. 专访李运华:程序员如何在技术上提升自己
  10. 苹果ppt_ppt制作苹果版下载 1.3.0
  11. Java导出word模板
  12. 均质机工作原理动画_高压均质机结构图.doc
  13. 迅雷链:DPoA 与 VRF
  14. 【无标题】【3D建模制作技巧分享】zbrush中如何卡硬边?
  15. C# MVC 微信支付教程系列之公众号支付代码
  16. Thinkpad T420 安装 mSATA SSD 固态硬盘
  17. python 交通_Python可视化交通拥堵情况
  18. 驱寒药不妨试试这几种食物
  19. 华为过程可信cib是指_【华为云技术分享】如何做一个优秀软件-可扩展的架构,良好的编码,可信的过程...
  20. 微信加菲猫连接服务器失败,一个加菲猫猫奴的哭诉,养加菲猫可能是我这辈子做过最错误的决定...

热门文章

  1. greylist 灰名单 灰名单技术
  2. plotclock绘图钟也可以画小猪佩奇
  3. javascript DOM小结
  4. MacBookPro装了Win10没有声音终极解决方案
  5. 第三章:MATLAB的基础知识(基本符号,数据类型,运算符,复数运算,三角函数运算)
  6. TightVNC怎么退出全屏
  7. linux chown命令文件,Linux chown命令详细介绍和使用实例(改变文件或目录的所有者)...
  8. 2022年四月新闻舆情事件分析集锦
  9. MYSQL查询今天昨天本周本月等的数据
  10. Matalb常用语句(4)---conj(共轭、共轭转置)