解决哈希(HASH)冲突的主要方法

算法加密(base64/md5/sha/DES/AES/RSA) 加密过程:AES为分组密码,分组密码也就是把明文分成一组一组的,每组长度相等,每次加密一组数据,直到加密完整个明文。将要编码的字符转换为对应的unicode编号,再将这个编号转为二进制字符,然后以六个长度为单位将编号分为一组,如果长度不够六个长度,用 ”0” 补齐,对每组六个长度的编码使用二进制解码,解码后的字符和Base64编码表相对应,以四个长度表示一个字符,如果不够四个长度就是用 “=” 补齐。通常使用较小的密钥,一般小于256bit,因为密钥越大,加密越强,加密和解密过程也会越慢。 阅读详情

http://blog.sina.com.cn/s/blog_54f82cc20100zuuy.html


虽然我们不希望发生冲突,但实际上发生冲突的可能性仍是存在的。当关键字值域远大于哈希表的长度,而且事先并不知道关键字的具体取值时。冲突就难免会发 生。另外,当关键字的实际取值大于哈希表的长度时,而且表中已装满了记录,如果插入一个新记录,不仅发生冲突,而且还会发生溢出。因此,处理冲突和溢出是 哈希技术中的两个重要问题。

1、开放定址法
        用开放定址法解决冲突的做法是:当冲突发生时,使用某种探查(亦称探测)技术在散列表中形成一个探查(测)序列。 沿此序列逐个单元地查找,直到找到给定 的关键字,或者碰到一个开放的地址(即该地址单元为空)为止(若要插入,在探查到开放的地址,则可将待插入的新结点存人该地址单元)。查找时探查到开放的 地址则表明表中无待查的关键字,即查找失败。
注意:
①用开放定址法建立散列表时,建表前须将表中所有单元(更严格地说,是指单元中存储的关键字)置空。
②空单元的表示与具体的应用相关。
         按照形成探查序列的方法不同,可将开放定址法区分为线性探查法、线性补偿探测法、随机探测等
(1)线性探查法(Linear Probing)
该方法的基本思想是:
       将散列表T[0..m-1]看成是一个循环向量,若初始探查的地址为d(即h(key)=d),则最长的探查序列为:
               d,d+l,d+2,…,m-1,0,1,…,d-1
        即:探查时从地址d开始,首先探查T[d],然后依次探查T[d+1],…,直到T[m-1],此后又循环到T[0],T[1],…,直到探查到T[d-1]为止。
探查过程终止于三种情况:
        (1)若当前探查的单元为空,则表示查找失败(若是插入则将key写入其中);
       (2)若当前探查的单元中含有key,则查找成功,但对于插入意味着失败;
        (3)若探查到T[d-1]时仍未发现空单元也未找到key,则无论是查找还是插入均意味着失败(此时表满)。
利用开放地址法的一般形式,线性探查法的探查序列为:
               h i =(h(key)+i)%m 0≤i≤m-1 //即d i =i
用线性探测法处理冲突,思路清晰,算法简单,但存在下列缺点:
① 处理溢出需另编程序。一般可另外设立一个溢出表,专门用来存放上述哈希表中放不下的记录。此溢出表最简单的结构是顺序表,查找方法可用顺序查找。
② 按上述算法建立起来的哈希表,删除工作非常困难。假如要从哈希表 HT 中删除一个记录,按理应将这个记录所在位置置为空,但我们不能这样做,而只能标上已被删除的标记,否则,将会影响以后的查找。
③ 线性探测法很容易产生堆聚现象。所谓堆聚现象,就是存入哈希表的记录在表中连成一片。按照线性探测法处理冲突,如果生成哈希地址的连续序列愈长 ( 即不同关键字值的哈希地址相邻在一起愈长 ) ,则当新的记录加入该表时,与这个序列发生冲突的可能性愈大。因此,哈希地址的较长连续序列比较短连续序列生长得快,这就意味着,一旦出现堆聚 ( 伴随着冲突 ) ,就将引起进一步的堆聚。
(2)线性补偿探测法
线性补偿探测法的基本思想是:
将线性探测的步长从 1 改为 Q ,即将上述算法中的 j = (j + 1) % m 改为: j = (j + Q) % m ,而且要求 Q 与 m 是互质的,以便能探测到哈希表中的所有单元。
【例】 PDP-11 小型计算机中的汇编程序所用的符合表,就采用此方法来解决冲突,所用表长 m = 1321 ,选用 Q = 25 。

(3)随机探测
随机探测的基本思想是:
将线性探测的步长从常数改为随机数,即令: j = (j + RN) % m ,其中 RN 是一个随机数。在实际程序中应预先用随机数发生器产生一个随机序列,将此序列作为依次探测的步长。这样就能使不同的关键字具有不同的探测次序,从而可以避 免或减少堆聚。基于与线性探测法相同的理由,在线性补偿探测法和随机探测法中,删除一个记录后也要打上删除标记。

2、拉链法
(1)拉链法解决冲突的方法
        拉链法解决冲突的做法是: 将所有关键字为同义词的结点链接在同一个单链表中 。若选定的散列表长度为m,则可将散列表定义为一个由m个头指针组成的指针数 组T[0..m-1]。凡是散列地址为i的结点,均插入到以T[i]为头指针的单链表中。T中各分量的初值均应为空指针。在拉链法中,装填因子α可以大于 1,但一般均取α≤1。
【例】设有 m = 5 , H(K) = K mod 5 ,关键字值序例 5 , 21 , 17 , 9 , 15 , 36 , 41 , 24 ,按外链地址法所建立的哈希表如下图所示:
                    解决哈希(HASH)冲突的主要方法
(2)拉链法的优点
与开放定址法相比,拉链法有如下几个优点:
拉链法处理冲突简单 ,且无堆积现象,即非同义词决不会发生冲突,因此平均查找长度较短;
②由于拉链法中各链表上的 结点空间是动态申请的 ,故它更适合于造表前无法确定表长的情况;
③开放定址法为减少冲突,要求装填因子α较小,故当结点规模较大时会浪费很多空间。而拉链法中可取α≥1,且结点较大时,拉链法中增加的指针域可忽略不计,因此节省空间;
④在用拉链法构造的散列表中,删除结点的操作易于实现。只要简单地删去链表上相应的结点即可。而对开放地址法构造的散列表,删除结点不能简单地将被删结 点的空间置为空,否则将截断在它之后填人散列表的同义词结点的查找路径。这是因为各种开放地址法中,空地址单元(即开放地址)都是查找失败的条件。因此在 用开放地址法处理冲突的散列表上执行删除操作,只能在被删结点上做删除标记,而不能真正删除结点。

(3)拉链法的缺点
        拉链法的缺点是:指针需要额外的空间,故当结点规模较小时,开放定址法较为节省空间,而若将 节省的指
飞书多维表格+影刀RPA:我如何用3个指令搞定每周的销售数据自动汇总(附完整配置截图) 本文详细介绍了如何利用飞书多维表格和影刀RPA实现销售数据的自动化汇总,通过三个核心指令(建立链接、列出记录、更新记录)简化繁琐的手工操作。文章包含完整的配置截图和实战指南,帮助用户快速部署自动化流程,提升工作效率。 阅读详情

相关推荐

比亚迪 10C 闪充技术全解析:超高速离子通道与双电子流设计如何颠覆电动车补能格局?

性能碾压主流方案参数宁德时代6C比亚迪10C优势幅度最大电流700A1000A+43%内阻降幅30%50%+67%5分钟补能240公里400公里+67%

百态·数智思维 | 聚焦大数据、量化与未来AI 1061

一款计算文件Hash值的工具

一款计算文件Hash值的工具

哈希冲突详解:5种常见解决方案及性能对比

哈希表是计算机科学中最重要且广泛应用的数据结构之一,几乎存在于所有现代编程语言的标准库中。然而,哈希冲突问题一直是影响哈希表性能的关键因素。本文旨在全面解析哈希冲突的各种解决方案,帮助读者深入理解其工作原理和适用场景。本文将首先介绍哈希表的基本概念,然后详细讲解5种哈希冲突解决方案,包括它们的实现原理、代码示例和性能分析。最后,我们将比较这些方法的优缺点,并提供实际应用中的选择建议。哈希(Hash Table):一种通过键(key)直接访问值(value)的数据结构。

AI 算法实战派 1061

解决哈希冲突(四种方法

一、了解哈希表及哈希冲突 哈希表:是一种实现关联数组抽象数据类型的数据结构,这种结构可以将关键码映射到给定值。简单来说哈希表(key-value)之间存在一个映射关系,是键值对的关系,一个键对应一个值。 哈希冲突:当两个不同的数经过哈希函数计算后得到了同一个结果,即他们会被映射到哈希表的同一个位置时,即称为发生了哈希冲突。简单来说就是哈希函数算出来的地址被别的元素占用了。 二、解决哈希冲突办法 1、开放定址法:我们在遇到哈希冲突时,去寻找一个新的空闲的哈希地址。 举例:就是当我们去教室上课..

qq_48241564的博客 8万+

hash冲突的4种解决方案

简介 解决hash冲突哈希冲突)有以下四种方法:法1:链地址法 对于相同的哈希值,使用链表进行连接。(HashMap使用此法)优点处理冲突简单,无堆积现象。即非同义词决不会发生冲突,因此平均查找长度较短; 适合总数经常变化的情况。(因为拉链法中各链表上的结点空间是动态申请的) 占空间小。装填因子可取α≥1,且结点较大时,拉链法中增加的指针域可忽略不计 删除结点的操作易于实现。只要简单地删去链表上相应的结点即可。 缺点查询时效率较低。(存储是动态的,查询时跳转需要更多的时间) 在key-value可以预知,

Debug yourself! 1万+

解决哈希(Hash)冲突主要方法

1.hash表简介:把任意长度的输入编程固定长度的输出,压缩映射。 2.解决哈希冲突主要方法

火舞狂沙 5446

知识产权自备笔记(注释).doc

知识产权自备笔记(注释).doc

上一篇: OSI七层模型及m每层上的协议
下一篇: 给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数
lightty
博客等级 码龄17年 59粉丝 147原创
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值