hash冲突以及hash冲突的解决方法
首先说一下hash冲突吧,hash冲突在hash表中一般情况下是会遇到的;
hash冲突指的是你在向hash表中存数据时,首先要通过key值进行指定的hash算法进行计算,然后得到一个值,这个值就是你要将这个key对应的value存入的地址。但是在这个地址中已经有值存在,所以这个时候就发生了hash冲突,不同的key通过hash算法得到了对应的同一个值。
hash冲突解决的方法:
再hash法:这种方法就是有多个hash算法,当使用一个hash算法计算得到值发生hash冲突时那就使用另外一个hash算法,直到没有hash冲突。这种方法增加了计算的时间。
开放地址法
这种方法也称再散列法,其基本思想是:当关键字key的哈希地址p=H(key)出现冲突时,以p为基础,产生另一个哈希地址p1,如果p1仍然冲突,再以p为基础,产生另一个哈希地址p2,…,直到找出一个不冲突的哈希地址pi ,将相应元素存入其中。这种方法有一个通用的再散列函数形式:
Hi=(H(key)+di)% m i=1,2,…,n
其中H(key)为哈希函数,m 为表长,di称为增量序列。增量序列的取值方式不同,相应的再散列方式也不同。主要有以下三种:
线性探测再散列
dii=1,2,3,…,m-1
这种方法的特点是:冲突发生时,顺序查看表中下一单元,直到找出一个空单元或查遍全表。
二次探测再散列
di=12,-12,22,-22,…,k2,-k2 ( k<=m/2 )
这种方法的特点是:冲突发生时,在表的左右进行跳跃式探测,比较灵活。
伪随机探测再散列
di=伪随机数序列。
具体实现时,应建立一个伪随机数发生器,(如i=(i+p) % m),并给定一个随机数做起点。
例如,
已知哈希表长度m=11,哈希函数为:H(key)= key % 11,则H(47)=3,H(26)=4,H(60)=5,假设下一个关键字为69,则H(69)=3,与47冲突。
如果用线性探测再散列处理冲突,下一个哈希地址为H1=(3 + 1)% 11 = 4,仍然冲突,再找下一个哈希地址为H2=(3 + 2)% 11 = 5,还是冲突,继续找下一个哈希地址为H3=(3 + 3)% 11 = 6,此时不再冲突,将69填入5号单元。
如果用二次探测再散列处理冲突,下一个哈希地址为H1=(3 + 12)% 11 = 4,仍然冲突,再找下一个哈希地址为H2=(3 - 12)% 11 = 2,此时不再冲突,将69填入2号单元。
如果用伪随机探测再散列处理冲突,且伪随机数序列为:2,5,9,………,则下一个哈希地址为H1=(3 + 2)% 11 = 5,仍然冲突,再找下一个哈希地址为H2=(3 + 5)% 11 = 8,此时不再冲突,将69填入8号单元。
- 链地址法
就是当发生hash冲突的时候,就使用一个链表来存放这些值。也就是将hash算法得到的值相同的key对应的value放在一个链表中。
Java中的hashmap中就是使用了这个方法。
hash冲突以及hash冲突的解决方法相关推荐
- 创业冲突的五种解决方法是_当创始合伙人发生冲突时,最好的解决方法4和5
原标题:当创始合伙人发生冲突时,最好的解决方法4和5 各位小麦粉的朋友,今天小编将会给各位分享当创始合伙人发生冲突时,最好的解决方法4和5,希望能给您带来帮助. 方法4:拥抱冲突,公平斗争 我们作为创 ...
- Visio 2016 MSI 与 Office 2016 Click-to-Run 冲突导致无法安装的解决方法
Visio 2016 MSI 与 Office 2016 Click-to-Run 冲突导致无法安装的解决方法 问题描述 已安装:Office 2016 家庭与学生版 64 bit(Click-to- ...
- maven jar包冲突常见报错及解决方法
见到如下错误,可以想到是不是jar包冲突 1.java.lang.NoSuchMethodError 2.java.lang.ClassNotFoundException 3.java.lang.No ...
- 冲突5种常用的解决方法
文章目录 前言 一.强迫命令 二.合作解决 三.妥协调解 四.缓和包容 五.撤退回避 总结 前言 在生活中,舌头和牙齿都难免打架,更何况在项目团队中,团队成员长时间工作在一起,难免会发生矛盾和冲突,当 ...
- svn提示没有设置冲突_svn代码冲突,不能提交的解决方法
对于刚接触svn的人来说,svn冲突后,不能提交是件让人很郁闷的事情.最让人郁闷的事,是代码间的覆盖.你把我代码盖了,我会很火大的.谁把谁的盖了都不爽. 为什么会出现代码冲突问题呢,因为不同的人,同时 ...
- 网易企业邮箱 跟Thunderbird 雷鸟 e mail 客户端发邮件有冲突,发双份 解决方法很简单(图)
问题:用Thunderbird 客户端和网易企业邮箱,发一份邮件时发件箱里显示发了两封,有点头疼哦,客服也没有给出明确答复:而且在修改各种配置是干脆无法发送邮件了,后来下载了最新版Thunderbir ...
- 项目管理中冲突的六种解决方法
解决项目冲突的主要责任在于项目经理,项目经理可以使用以下六种方法来解决冲突: 面对/解决问题(confronting/problem solving):通过审查备选方案,把冲突当作需要解决的问题来处理 ...
- (LInux)network网卡重启失败原因及解决方法
前言 在我们进行网络配置的时候,经常会遇到配置成功后却无法重启网卡的问题,下面就介绍的是network重启失败的原因及解决方法. 报错 Job for network.service failed b ...
- 用链表和数组实现HASH表,几种碰撞冲突解决方法
Hash算法中要解决一个碰撞冲突的办法,后文中描述了几种解决方法.下面代码中用的是链式地址法,就是用链表和数组实现HASH表. he/*hash table max size*/ #define HA ...
- HashMap 中 hash 冲突的解决方法及原理分析
我们最先衰老的不是容貌,而是不顾一切的闯劲.有时候,要敢于背上超出自己预料的包袱,真的努力后,你会发现自己要比想象的优秀很多. HashMap冲突的解决方法比较考验一个开发者解决问题的能力. 在Jav ...
最新文章
- Facebook再曝数据丑闻删除应用数据仍会被泄漏
- 在线作图|如何绘制带分组的散点图
- 记录一下matlab-vs联合编程
- MyBatis -- Spring -- SqlSessionFactoryBean
- .net 应用迁移到Mono 工具 (Moma)
- 【LoadRunner】安装LoadRunner时提示缺少vc2005_sp1_with_atl_fix_redist解决方案
- 安富莱v6开发板网口通讯_安富莱嵌入式周报第170期:2020.07.202020.07.26
- LeetCode 1065. 字符串的索引对
- 资源分享|平面设计师可参考的素材网站
- python中color语句_python中的colorlog库详解
- java的多态代码例子_java 多态实例代码
- 如何用php开启企业微信开发的回调模式
- TI的Controlsuit里的硬件资源打开方式(Eagle转AD)
- 打砖块游戏源文件_大家无聊的话不如来玩玩这些小游戏
- 2022苹果ios个人开发中注册遇到的问题
- Alphapose_pytorch版本环境配置Win10
- 前端调用微信扫一扫不触发事件,没有任何反应
- java 23种设计模式详解
- 手环、APP监测睡眠可靠吗?
- 浅试uniapp 集成融云 实现视频通话
热门文章
- 基于python的数据管理系统的设计_基于Python的自然语言数据处理系统的设计与实现...
- 如何修复Sketchup经常遇到的错误报告问题
- sketch up rbs/rbz/rb插件安装方法
- 信息安全管理体系--建立
- JavaSE实现汽车租赁系统
- 一名待业小生亲身调研揭秘10家大数据培训机构“内幕”
- Hydra(弱密码爆破)使用教程
- 基于OP放大器的有源模拟滤波器设计--一阶有源滤波器
- ios模拟器 安装ipa_用iOS模拟器安装App的方法
- 微信小程序 地图 组件