哈希表:如何利用好高效率查找的“利器”?
什么是哈希表
哈希表名字源于 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。如下图所示:
哈希表:如何利用好高效率查找的“利器”?相关推荐
- 哈希表等概率情况下查找成功和查找不成功的平均查找长度的计算
最近复习了下数据结构中的哈希表,发现在计算等概率情况下查找不成功的平均查找长度时比较迷茫,不知道到底是怎么计算出来的.现在通过查阅资料终于知道如何计算了,所以记录下来以供以后查阅. 下面看下2010年 ...
- 数据结构-使用哈希存储将数据存入哈希表中,并进行查找
主函数 #include "./fun.h"int main(int argc, const char *argv[]) {int arr[10] = {25,51,8,22,26 ...
- 数据结构与算法第二章 线性表、栈、队列、数组、字符串、树、二叉树、哈希表的增删查
03 增删查:掌握数据处理的基本操作,以不变应万变 通过前面课时的学习,相信你已经建立了利用数据结构去完成时空转移的思想.接下来,你需要在理论思想的指导下灵活使用.其实,要想灵活使用数据结构,你需要先 ...
- 哈希表——高效率的利器
关于数据的处理,不同的数据结构各有千秋. 线性表中的栈和队列对增删有严格要求,它们会更关注数据的顺序. 数组和字符串需要保持数据类型的统一,并且在基于索引的查找上会更有优势. 树的优势则体现在数据的层 ...
- 哈希表查找——成功和不成功时的平均查找长度
哈希表查找--成功和不成功时的平均查找长度 以下求解过程是按照"计算机统考的计算方法",不同的老师.教材在"处理冲突"上可能会有不同的方法,所以最主要的是掌握原 ...
- 查找算法5——哈希表查找
哈希表也称散列表,也是用来查找指定元素的一种方法.利用哈希表查找元素需要解决两个问题:构造哈希表和处理冲突. 比如,给定一组元素78.90.66.70.155.82.123.231,设哈希表长m=11 ...
- 【ZZ】详解哈希表的查找
详解哈希表的查找 https://mp.weixin.qq.com/s/j2j9gS62L-mmOH4p89OTKQ 详解哈希表的查找 2018-03-01 算法与数据结构 来自:静默虚空 http: ...
- 查找三 哈希表的查找
要点 哈希表和哈希函数 在记录的存储位置和它的关键字之间是建立一个确定的对应关系(映射函数),使每个关键字和一个存储位置能唯一对应.这个映射函数称为哈希函数,根据这个原则建立的表称为哈希表(Hash ...
- 哈希表及哈希表查找相关概念(转)
1. 哈希表的概念 对于动态查找表而言,1) 表长不确定:2)在设计查找表时,只知道关键字所属范围,而不知道确切的关键字.因此,一般情况需建立一个函数关系,以f(key)作为关键字为key的录在表中的 ...
- ds哈希查找—二次探测再散列_大白话之哈希表和哈希算法
哈希表概念 哈希表(散列表),是基于关键码值(Key value)而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度.这个映射函数叫做散列函数(哈希函数 ...
最新文章
- 用Uber的方式管理机器学习模型
- Centos6.5下docker 环境搭建
- Beta 冲刺 (3/7)
- Opensmile 简介
- 今天俺要说一说工厂方法模式(Factory)
- 浅析NSTimer CADisplayLink内存泄露
- 十大排序算法之插入排序
- regular expression in SAP jam integration
- java ranger rest_kafka ranger integration issuse
- 精选30道Java多线程面试题
- [Selenium] 操作新弹出窗口之验证标题和内容
- 异构平台同步(Mysql到Oracle)
- 我爱计算机视觉干货集锦分类汇总(2019年6月17日)
- 7-5 BCD解密 (10 分)
- 曼切斯特编码波特率和比特率的关系
- Adobe Bridge 2020新增功能
- 互联网产品设计思路参考
- 【TP5.1】商品列表加载
- -1. HTMLCSS 基础总结
- html中怎么设置渐变颜色设置,css中渐变色怎么设置
热门文章
- vmalloc与mmap
- freeswitch 使用mysql替换默认的sqlite
- Oracle bad magic 1,linux下Oracle的安装
- java has a 关系,Java组成(has-a)关系澄清
- 最长连续不重复子序列(双指针算法)
- java学习资料总结
- java hdfs ha_hadoop2.x hdfs完全分布式 HA 搭建
- mysql5.7bka_mysql 5.7中的MRR和BKA算法
- ssas连接mysql_BI-SSAS简介篇
- react取消捕获_React生命周期