解决哈希冲突(四种方法)
目录
一、了解哈希表及哈希冲突
二、解决哈希冲突办法
1、开放定址法:我们在遇到哈希冲突时,去寻找一个新的空闲的哈希地址。
(1)线性探测法
(2)平方探测法(二次探测)
2、再哈希法
3、链地址法:将所有哈希地址相同的记录都链接在同一链表中。
4、建立公共溢出区:将哈希表分为基本表和溢出表,将发生冲突的都存放在溢出表中。
一、了解哈希表及哈希冲突
哈希表:是一种实现关联数组抽象数据类型的数据结构,这种结构可以将关键码映射到给定值。简单来说哈希表(key-value)之间存在一个映射关系,是键值对的关系,一个键对应一个值。
哈希冲突:当两个不同的数经过哈希函数计算后得到了同一个结果,即他们会被映射到哈希表的同一个位置时,即称为发生了哈希冲突。简单来说就是哈希函数算出来的地址被别的元素占用了。
二、解决哈希冲突办法
1、开放定址法:我们在遇到哈希冲突时,去寻找一个新的空闲的哈希地址。
举例:就是当我们去教室上课,发现该位置已经存在人了,所以我们应该寻找新的位子坐下,这就是开放定址法的思路。如何寻找新的位置就通过以下几种方法实现。
(1)线性探测法
当我们的所需要存放值的位置被占了,我们就往后面一直加1并对m取模直到存在一个空余的地址供我们存放值,取模是为了保证找到的位置在0~m-1的有效空间之中。
公式:h(x)=(Hash(x)+i)mod (Hashtable.length);(i会逐渐递增加1)
举例:
存在问题:出现非同义词冲突(两个不想同的哈希值,抢占同一个后续的哈希地址)被称为堆积或聚集现象。
(2)平方探测法(二次探测)
当我们的所需要存放值的位置被占了,会前后寻找而不是单独方向的寻找。
公式:h(x)=(Hash(x) +i)mod (Hashtable.length);(i依次为+(i^2)和-(i^2))
举例:
2、再哈希法:同时构造多个不同的哈希函数,等发生哈希冲突时就使用第二个、第三个……等其他的哈希函数计算地址,直到不发生冲突为止。虽然不易发生聚集,但是增加了计算时间。
3、链地址法:将所有哈希地址相同的记录都链接在同一链表中。
公式:h(x)=xmod(Hashtable.length);
4、建立公共溢出区:将哈希表分为基本表和溢出表,将发生冲突的都存放在溢出表中。
解决哈希冲突(四种方法)相关推荐
- 哈希冲突四种解决方法
哈希冲突的产生原因 哈希是通过对数据进行再压缩,提高效率的一种解决方法.但由于通过哈希函数产生的哈希值是有限的,而数据可能比较多,导致经过哈希函数处理后仍然有不同的数据对应相同的值.这时候就产生了哈希 ...
- Java解决Hash(散列)冲突的四种方法--开放地址法(线性探测,二次探测,伪随机探测)、链地址法、再哈希、建立公共溢出区
Java解决Hash(散列)冲突的四种方法--开放地址法(线性探测,二次探测,伪随机探测).链地址法.再哈希.建立公共溢出区 参考文章: (1)Java解决Hash(散列)冲突的四种方法--开放地址法 ...
- Hash算法解决冲突的四种方法
Hash算法解决冲突的四种方法 参考文章: (1)Hash算法解决冲突的四种方法 (2)https://www.cnblogs.com/lyfstorm/p/11044468.html 备忘一下.
- 哈希冲突与解决哈希冲突的两种方法
哈希冲突与解决哈希冲突的两种方法 1.哈希冲突 2.解决哈希冲突的方法 (1)链接法 (2)开放寻址法 ①线性探查 ②二次探查 ③双重探查 注:本文注重对解决哈希冲突方法的介绍,而非对背后原理的介绍. ...
- 拉链法解决哈希冲突的方式和几种常见的散列函数
本文探讨拉链表解决哈希冲突的方式和几种常见的散列函数. 首先,什么是散列表? 对于一个数组,我们在O(1)时间复杂度完成可以完成其索引的查找,现在我们想要存储一个key value的键值对,我们可以根 ...
- utf—8在苹果手机上乱码_【研究】解决iPhone中文邮件乱码的四种方法
转载自FTidea.com 众所周知,由于iPhone目前在MobileMail中尚不支持除UTF-8之外的其它编码,而大部分国内中文邮件采用GB2312编码,造成中文邮件大多在iPhone上显示乱码 ...
- 四种方法解决最大连续子序列和问题
四种方法解决最大连续子序列和问题 参考文章: (1)四种方法解决最大连续子序列和问题 (2)https://www.cnblogs.com/AlvinZH/p/6795647.html 备忘一下.
- python字典实现原理-哈希函数-解决哈希冲突方法
python字典实现原理-哈希函数-解决哈希冲突方法 参考文章: (1)python字典实现原理-哈希函数-解决哈希冲突方法 (2)https://www.cnblogs.com/guyannanfe ...
- 四种方法解决DIV高度自适应问题
四种方法解决DIV高度自适应问题 参考文章: (1)四种方法解决DIV高度自适应问题 (2)https://www.cnblogs.com/smght/p/4505614.html 备忘一下.
最新文章
- python技术晨讲_python系列教程14
- python3 文本文件内容去除重复行
- opencv图像遍历方法速度对比
- cocos2d-x 打包成so文件之后,假设出现错误,能够使用ndk-stack来查看里面的异常...
- LeetCode Flatten Binary Tree to Linked List (dfs)
- 【C 语言】指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方式 | 字符串 | 指针数组 | 数组指针 | 多维数组 | 多维指针 | 数组参数 | 函数指针 | 复杂指针解读)
- mysql 获取 row的id_转: MYSQL获取更新行的主键ID
- a表两个字段都与b表一个字段关联_数据库表的主键实例分析
- k均值算法 二分k均值算法_如何获得K均值算法面试问题
- centos删除gnome_自定义你的 GNOME 桌面主题 | Linux 中国
- html百分比单位,视窗单位 vs 百分比单位
- 快手上也可以看电竞赛事了:S9直播观看人数惊人!
- flowable 中文文档_滴滴实习收获 | 产品经理就是写文档和开会沟通的吗?
- 端口被占用的解决方案
- C语言不使用中间变量交换两个变量值
- [Tracker] linux 搭建 BitTorrent
- 柿饼UI入门课程第一周作业
- nRF51822-新手入门笔记
- Adobe Audition CS6原生支持ape和flac
- 相片打印机原理_相片打印机怎么打印? 2021照片打印机(手机照片打印机)推荐...
热门文章
- 数仓工具—Hive实战之累计计算(7)
- 普华永道:尽管趋势看跌 对冲基金仍在涉足加密领域
- AI钜惠第三弹 | 人工智能的数学基础
- python烟花表白引大火_代码实现女孩子表白烟花效果~让你快速撩妹!
- 企业数字化转型:产品的设计思路!
- 神泣单机显示服务器断开,7.0单机版为什么服务器连接断开
- 监控摄像机常识:宽动态 (WDR)介绍和理解
- 【日常总结】Docker 磁盘占满解决方案
- 本地提交spark_Spark在Windows下运行,本地提交spark到远程yarn集群
- java实现通过绑定邮箱找回密码功能_SpringMVC通过邮件找回密码功能的实现