一般的查找

给你一个顺序表,你会如何查找某个给定的元素?

  • 一般思路就是从表头开始,一个挨一个的比较记录a[i]与key的值是“=”还是“≠”,直到有相等才算是査找成功,返回i的值。

到了有序表(已排序的表)査找时,我们可以利用a[i]与key的“<” 或 “>”,来折半査找,直到相等时査找成功返回i。

反正我们的目标就是要找到那个 i 值,是不是还有其它好点的方法呢?

一个小故事

试想这样的场景,你很想学太极拳,听说学校有个叫张三丰的人打得特别好,于是你到学校学生处找人。学生处的工作人员可能会拿出学生名单,一个一个的査找, 最终告诉你,学校没这个人,并说张三丰几百年前就已经在武当山作古了。可如果你找对了人,比如在操场上找那些爱运动的同学,人家会告诉你,“哦,你找张三丰呀, 有有有,我带你去。”于是他把你带到了体育馆内,并告诉你,那个教大家打太极的小伙子就是“张三丰”,原来“张三丰” 是因为他太极拳打得好而得到的外号。

  • 数据结构的知识可以和生活上的事情类比,查找其实跟找人就很像。学生处的老师找张三丰,那就是顺序表査找,依赖的是姓名关键字的比较。而通过爱好运动的同学询问时,没有遍历,没有比较,就凭他们“欲找太极‘张三丰’,必在体育馆当中”的经验,直接告诉你位置。

也就是说,我们只需要通过某个函数f,使得

存储位置 = f(关键字)

那样我们可以通过査找关键字不需要比较就可获得需要的记录的存储位置。

这就是一种新的存储技术——散列技术。

散列技术与散列表

散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key)。

査找时,根据这个确定的对应关系找到给定值key的映射f(key),若査找集合中存在这个记录,则必定在f(key)的位置上。

这里我们把这种对应关系f称为散列函数,又称为哈希(Hash)函数。按这个思想,采用散列技术将记录存储在一块连续的存储空间中,这块连续存储空间称为散列表或哈希表(Hashtable)。那么关键字对应的记录存储位置我们称为散列地址。

  • 明白了!经常听说的哈希表,原来是这么回事。看来里面还有很多学问,兴趣满满呢。让我们后面继续深入地去了解哈希技术~

(1)散列表(哈希表)的定义相关推荐

  1. 算法设计与分析——散列表/哈希表(Hash Table):直接寻址表

    分类目录:<算法设计与分析>总目录 相关文章: ·散列表/哈希表(Hash Table)(一):基础知识 ·散列表/哈希表(Hash Table)(二):直接寻址表 ·散列表/哈希表(Ha ...

  2. 散列表(哈希表)(散列函数构造、处理冲突、查找)

    本文转载自: [1]https://blog.csdn.net/qq_22238021/article/details/78258605 [2]https://blog.csdn.net/duan19 ...

  3. 【数据结构笔记41】散列表/哈希表的性能分享

    本次笔记内容: 11.4 散列表的性能分析 文章目录 平均查找长度 影响冲突产生的三个因素 不同方法的性能 线性探测法查找性能 平方探测法和双散列探测法的查找性能 期望探测次数与装填因子α的关系 分离 ...

  4. 哈希表(散列表)—Hash表解决地址冲突 C语言实现

    哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度.具体的介绍网上有很详 ...

  5. 数据结构与算法笔记(十五)—— 散列(哈希表)

    一.前沿 1.1.直接寻址表 当关键字的全域U比较小时,直接寻址是一种简单而有效的技术.假设某应用要用到一个动态集合,其中每个元素都有一个取自全域U={0,1,-,m-1)的关键字,此处m是一个不很大 ...

  6. [数据结构] 散列表(哈希表)

    散列表(哈希表) 比较难理解的官方定义:散列表/哈希表(Hash table),是根据关键码值(Key value)而直接进行访问的数据结构.它通过把关键码值映射到表中一个位置来访问记录,以加快查找的 ...

  7. 如何设计散列表(哈希表)

    如何设计散列表(哈希表) 可以获取到什么 通过本章可以了解散列表是什么数据结构,为什么叫做散列表?他的特点是什么?以及如何去设计一个散列表?为什么要这么设计? 会介绍散列表中三个重要的核心点:散列函数 ...

  8. hashtable——散列表

    2018-11-01 散列表---哈希表基于快速存取,时间换空间一种基于线性数组的线性表,不过元素之间并非紧密排列 散列函数--通过函数,有key关键码计算地址(相当于数组下标),函数尽可能使元素均匀 ...

  9. 密码学-hash散列表

    hash散列表 哈希表(也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度.这个映射函数叫做散列函数, ...

  10. 计算散列表查找成功和查找不成功的平均查找长度(利用线性探测法处理冲突)

    散列表 哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度.映射函数叫做 ...

最新文章

  1. 机器学习中训练集、验证集和测试集的区别
  2. ajax就收data的参数
  3. CodeSmith 4.0 正式版发布
  4. 【SpringBoot零基础案例06】【IEDA 2021.1】多环境下.properties配置文件的使用
  5. WIN8 打开图片内置管理员无法激活此应用
  6. Springboot Freemarker 将模板放在jar包外面
  7. Coolite Toolkit学习笔记八:常用控件TabPanel
  8. 博文视点算法书单|让算法学习不再难
  9. 面试要10K,HR说你只值7K,怎么斗得过?
  10. Linux下安装jdk1.7
  11. 学生信息管理系统总体设计规划书
  12. java 邮件接收,用Java接收电子邮件
  13. 【gigabyte】开机循环进入技嘉主板界面、BIOS功能识别不出硬盘
  14. 如何批量下载上海证券交易所上市公司年报
  15. 清华大学何平:央行数字货币具备许多优势 但不可盲目推进
  16. 如何提高服务器硬盘读写速度,如何加速硬盘读写速度,如何完全控制ntfs 分区...
  17. web用户中心设计_关于Web设计和用户体验的10个误解
  18. 爬壁机器人外文文献_仿生爬壁机器人的研究现状
  19. python调用python脚本
  20. C语言初级篇-----循环语句详解

热门文章

  1. python标准化输出
  2. python 识别 None,NaN,null,‘‘,‘ ‘ 等无意义的值
  3. 排序算法(2)----插入排序
  4. 计算机的指令合成为,第二章计算机操作基础知识doc
  5. MySQL数据库应用形考_2020国开中优教育《MySQL数据库应用》形考任务题库
  6. Spring Boot 针对 Java 开发人员的安装指南
  7. idea 中新建Servlet
  8. redis 参数配置总结
  9. 跨域验证cookie与缓存控制
  10. html HTML 文本格式化