什么是哈希表

哈希表名字源于 Hash,也可以叫作散列表。哈希表是一种特殊的数据结构,它与数组、链表以及树等我们之前学过的数据结构相比,有很明显的区别。

哈希表的核心思想

如果有一种方法,可以实现“地址 = f (关键字)”的映射关系,那么就可以快速完成基于数据的数值的查找了。这就是哈希表的核心思想。

如何设计哈希函数

我们先看一些常用的设计哈希函数的方法:

  • 第一,直接定制法

哈希函数为关键字到地址的线性函数。如,H (key) = a*key + b。 这里,a 和 b 是设置好的常数。

  • 第二,数字分析法

假设关键字集合中的每个关键字 key 都是由 s 位数字组成(k1,k2,…,Ks),并从中提取分布均匀的若干位组成哈希地址。上面张一、张二、张三、张四的手机号信息存储,就是使用的这种方法。

  • 第三,平方取中法

如果关键字的每一位都有某些数字重复出现,并且频率很高,我们就可以先求关键字的平方值,通过平方扩大差异,然后取中间几位作为最终存储地址。

  • 第四,折叠法

如果关键字的位数很多,可以将关键字分割为几个等长的部分,取它们的叠加和的值(舍去进位)作为哈希地址。

  • 第五,除留余数法

预先设置一个数 p,然后对关键字进行取余运算。即地址为 key mod p。

如何解决哈希冲突

  • 第一,开放定址法

即当一个关键字和另一个关键字发生冲突时,使用某种探测技术在哈希表中形成一个探测序列,然后沿着这个探测序列依次查找下去。当碰到一个空的单元时,则插入其中。

  • 第二,链地址法

将哈希地址相同的记录存储在一张线性链表中。

例如,有一组关键字 {12,13,25,23,38,84,6,91,34},采用的哈希函数为 key mod 11。如下图所示:

哈希表:如何利用好高效率查找的“利器”?相关推荐

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

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

  2. 数据结构-使用哈希存储将数据存入哈希表中,并进行查找

    主函数 #include "./fun.h"int main(int argc, const char *argv[]) {int arr[10] = {25,51,8,22,26 ...

  3. 数据结构与算法第二章 线性表、栈、队列、数组、字符串、树、二叉树、哈希表的增删查

    03 增删查:掌握数据处理的基本操作,以不变应万变 通过前面课时的学习,相信你已经建立了利用数据结构去完成时空转移的思想.接下来,你需要在理论思想的指导下灵活使用.其实,要想灵活使用数据结构,你需要先 ...

  4. 哈希表——高效率的利器

    关于数据的处理,不同的数据结构各有千秋. 线性表中的栈和队列对增删有严格要求,它们会更关注数据的顺序. 数组和字符串需要保持数据类型的统一,并且在基于索引的查找上会更有优势. 树的优势则体现在数据的层 ...

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

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

  6. 查找算法5——哈希表查找

    哈希表也称散列表,也是用来查找指定元素的一种方法.利用哈希表查找元素需要解决两个问题:构造哈希表和处理冲突. 比如,给定一组元素78.90.66.70.155.82.123.231,设哈希表长m=11 ...

  7. 【ZZ】详解哈希表的查找

    详解哈希表的查找 https://mp.weixin.qq.com/s/j2j9gS62L-mmOH4p89OTKQ 详解哈希表的查找 2018-03-01 算法与数据结构 来自:静默虚空 http: ...

  8. 查找三 哈希表的查找

    要点 哈希表和哈希函数 在记录的存储位置和它的关键字之间是建立一个确定的对应关系(映射函数),使每个关键字和一个存储位置能唯一对应.这个映射函数称为哈希函数,根据这个原则建立的表称为哈希表(Hash ...

  9. 哈希表及哈希表查找相关概念(转)

    1. 哈希表的概念 对于动态查找表而言,1) 表长不确定:2)在设计查找表时,只知道关键字所属范围,而不知道确切的关键字.因此,一般情况需建立一个函数关系,以f(key)作为关键字为key的录在表中的 ...

  10. ds哈希查找—二次探测再散列_大白话之哈希表和哈希算法

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

最新文章

  1. 用Uber的方式管理机器学习模型
  2. Centos6.5下docker 环境搭建
  3. Beta 冲刺 (3/7)
  4. Opensmile 简介
  5. 今天俺要说一说工厂方法模式(Factory)
  6. 浅析NSTimer CADisplayLink内存泄露
  7. 十大排序算法之插入排序
  8. regular expression in SAP jam integration
  9. java ranger rest_kafka ranger integration issuse
  10. 精选30道Java多线程面试题
  11. [Selenium] 操作新弹出窗口之验证标题和内容
  12. 异构平台同步(Mysql到Oracle)
  13. 我爱计算机视觉干货集锦分类汇总(2019年6月17日)
  14. 7-5 BCD解密 (10 分)
  15. 曼切斯特编码波特率和比特率的关系
  16. Adobe Bridge 2020新增功能
  17. 互联网产品设计思路参考
  18. 【TP5.1】商品列表加载
  19. -1. HTMLCSS 基础总结
  20. html中怎么设置渐变颜色设置,css中渐变色怎么设置

热门文章

  1. vmalloc与mmap
  2. freeswitch 使用mysql替换默认的sqlite
  3. Oracle bad magic 1,linux下Oracle的安装
  4. java has a 关系,Java组成(has-a)关系澄清
  5. 最长连续不重复子序列(双指针算法)
  6. java学习资料总结
  7. java hdfs ha_hadoop2.x hdfs完全分布式 HA 搭建
  8. mysql5.7bka_mysql 5.7中的MRR和BKA算法
  9. ssas连接mysql_BI-SSAS简介篇
  10. react取消捕获_React生命周期