目录

一、了解哈希表及哈希冲突

二、解决哈希冲突办法

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、建立公共溢出区:将哈希表分为基本表和溢出表,将发生冲突的都存放在溢出表中。

解决哈希冲突(四种方法)相关推荐

  1. 哈希冲突四种解决方法

    哈希冲突的产生原因 哈希是通过对数据进行再压缩,提高效率的一种解决方法.但由于通过哈希函数产生的哈希值是有限的,而数据可能比较多,导致经过哈希函数处理后仍然有不同的数据对应相同的值.这时候就产生了哈希 ...

  2. Java解决Hash(散列)冲突的四种方法--开放地址法(线性探测,二次探测,伪随机探测)、链地址法、再哈希、建立公共溢出区

    Java解决Hash(散列)冲突的四种方法--开放地址法(线性探测,二次探测,伪随机探测).链地址法.再哈希.建立公共溢出区 参考文章: (1)Java解决Hash(散列)冲突的四种方法--开放地址法 ...

  3. Hash算法解决冲突的四种方法

    Hash算法解决冲突的四种方法 参考文章: (1)Hash算法解决冲突的四种方法 (2)https://www.cnblogs.com/lyfstorm/p/11044468.html 备忘一下.

  4. 哈希冲突与解决哈希冲突的两种方法

    哈希冲突与解决哈希冲突的两种方法 1.哈希冲突 2.解决哈希冲突的方法 (1)链接法 (2)开放寻址法 ①线性探查 ②二次探查 ③双重探查 注:本文注重对解决哈希冲突方法的介绍,而非对背后原理的介绍. ...

  5. 拉链法解决哈希冲突的方式和几种常见的散列函数

    本文探讨拉链表解决哈希冲突的方式和几种常见的散列函数. 首先,什么是散列表? 对于一个数组,我们在O(1)时间复杂度完成可以完成其索引的查找,现在我们想要存储一个key value的键值对,我们可以根 ...

  6. utf—8在苹果手机上乱码_【研究】解决iPhone中文邮件乱码的四种方法

    转载自FTidea.com 众所周知,由于iPhone目前在MobileMail中尚不支持除UTF-8之外的其它编码,而大部分国内中文邮件采用GB2312编码,造成中文邮件大多在iPhone上显示乱码 ...

  7. 四种方法解决最大连续子序列和问题

    四种方法解决最大连续子序列和问题 参考文章: (1)四种方法解决最大连续子序列和问题 (2)https://www.cnblogs.com/AlvinZH/p/6795647.html 备忘一下.

  8. python字典实现原理-哈希函数-解决哈希冲突方法

    python字典实现原理-哈希函数-解决哈希冲突方法 参考文章: (1)python字典实现原理-哈希函数-解决哈希冲突方法 (2)https://www.cnblogs.com/guyannanfe ...

  9. 四种方法解决DIV高度自适应问题

    四种方法解决DIV高度自适应问题 参考文章: (1)四种方法解决DIV高度自适应问题 (2)https://www.cnblogs.com/smght/p/4505614.html 备忘一下.

最新文章

  1. python技术晨讲_python系列教程14
  2. python3 文本文件内容去除重复行
  3. opencv图像遍历方法速度对比
  4. cocos2d-x 打包成so文件之后,假设出现错误,能够使用ndk-stack来查看里面的异常...
  5. LeetCode Flatten Binary Tree to Linked List (dfs)
  6. 【C 语言】指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方式 | 字符串 | 指针数组 | 数组指针 | 多维数组 | 多维指针 | 数组参数 | 函数指针 | 复杂指针解读)
  7. mysql 获取 row的id_转: MYSQL获取更新行的主键ID
  8. a表两个字段都与b表一个字段关联_数据库表的主键实例分析
  9. k均值算法 二分k均值算法_如何获得K均值算法面试问题
  10. centos删除gnome_自定义你的 GNOME 桌面主题 | Linux 中国
  11. html百分比单位,视窗单位 vs 百分比单位
  12. 快手上也可以看电竞赛事了:S9直播观看人数惊人!
  13. flowable 中文文档_滴滴实习收获 | 产品经理就是写文档和开会沟通的吗?
  14. 端口被占用的解决方案
  15. C语言不使用中间变量交换两个变量值
  16. [Tracker] linux 搭建 BitTorrent
  17. 柿饼UI入门课程第一周作业
  18. nRF51822-新手入门笔记
  19. Adobe Audition CS6原生支持ape和flac
  20. 相片打印机原理_相片打印机怎么打印? 2021照片打印机(手机照片打印机)推荐...

热门文章

  1. 数仓工具—Hive实战之累计计算(7)
  2. 普华永道:尽管趋势看跌 对冲基金仍在涉足加密领域
  3. AI钜惠第三弹 | 人工智能的数学基础
  4. python烟花表白引大火_代码实现女孩子表白烟花效果~让你快速撩妹!
  5. 企业数字化转型:产品的设计思路!
  6. 神泣单机显示服务器断开,7.0单机版为什么服务器连接断开
  7. 监控摄像机常识:宽动态 (WDR)介绍和理解
  8. 【日常总结】Docker 磁盘占满解决方案
  9. 本地提交spark_Spark在Windows下运行,本地提交spark到远程yarn集群
  10. java实现通过绑定邮箱找回密码功能_SpringMVC通过邮件找回密码功能的实现