一种哈希冲突的处理方法、装置及计算机可读存储介质制造方法及图纸

技术编号:24707908 阅读:74 留言:0更新日期:2020-06-30 23:57
本申请公开了一种哈希冲突的处理方法、装置及计算机可读存储介质,包括:获取待插入至哈希表的关键值和结果值;利用至少两个不同哈希函数分别对待插入至哈希表的关键值进行哈希运算,得到哈希值;根据获得的哈希值和索引表确定出待插入至哈希表的关键值不会引起哈希冲突,为待插入至哈希表的关键值分配与哈希表中已有的关键值对应的索引值不相同的目标索引值;以目标索引值为地址将待插入至哈希表的关键值和结果值添加至哈希表。从本发明专利技术实施例可见,从不同的哈希函数出发减少了出现哈希冲突的概率,并且以目标索引值作为即将插入关键值和结果值的地址,必然和哈希表中已存在的关键值的地址不相同,因此在不扩大哈希表的前提下减少了哈希冲突。

【技术实现步骤摘要】
一种哈希冲突的处理方法、装置及计算机可读存储介质
本专利技术实施例涉及网络通信
,尤指一种哈希冲突的处理方法、装置及计算机可读存储介质。
技术介绍
哈希(hash)算法就是把一个k比特(bit)位宽的关键值(key)映射到一个n比特位宽的索引值(index),k>n。比如key是200比特位宽的二进制数据,要通过哈希映射到一个20比特位宽的二进制数据index。由于key的样本空间显然要比index的样本空间大许多,在映射过程中会出现对于不同的key值:key1和key2,经过哈希映射后的index是相同的,这就是哈希冲突。哈希表基于哈希算法,是以index为地址存储相应的key值和其他表项信息的数据结构网络,设备中会经常使用哈希表进行路由查找和数据转发,当哈希冲突出现时,会导致路由查找错误,数据转发失败。相关技术中,解决哈希冲突的方法是扩大哈希表,把一个index指向的哈希表地址划分为M个位置(slot),每个slot存储不同的key,这样一来,原本N个存储单元的哈希表空间扩大为M*N个存储单元,出现哈希冲突时,不同key存储在相同index指向的地址中的不同slot。然而,由于哈希表需要使用存储器对其进行存储,当扩大哈希表时,意味着存储哈希表需要更大容量的存储器,因此会增大设备方面的开销;另一方面,由于存储器具有数据位宽限制,当一个哈希表地址的数据位宽太大,需要多次访问该存储器才能读出该空间所有slot的信息,因此会降低哈希表的查找速度。
技术实现思路
为了解决上述技术问题,本专利技术实施例提供了一种哈希冲突的处理方法、装置及计算机可读存储介质,能够在不扩大哈希表的前提下减少哈希冲突。为了达到本专利技术目的,本专利技术实施例提供了一种哈希冲突的处理方法,包括:获取待插入至哈希表的关键值和结果值;利用预先设置的至少两个不同哈希函数分别对所述待插入至哈希表的关键值进行哈希运算,得到至少两个哈希值;根据获得的哈希值和预先建立的用于存储索引值的索引表确定出所述待插入至哈希表的关键值不会引起哈希冲突,为所述待插入至哈希表的关键值分配与历史索引值不相同的目标索引值;其中,所述历史索引值为与所述哈希表中已有的关键值对应的索引值;以所述目标索引值为地址将所述待插入至哈希表的关键值和结果值添加至所述哈希表。本专利技术实施例还提供了一种哈希冲突的处理装置,包括:获取模块,用于获取待插入至哈希表的关键值和结果值;运算模块,用于利用预先设置的至少两个不同哈希函数分别对所述待插入至哈希表的关键值进行哈希运算,得到至少两个哈希值;处理模块,用于根据获得的哈希值和预先建立的用于存储索引值的索引表确定出所述待插入至哈希表的关键值不会引起哈希冲突,为所述待插入至哈希表的关键值分配与历史索引值不相同的目标索引值;其中,所述历史索引值为与所述哈希表中已有的关键值对应的索引值;添加模块,用于以所述目标索引值为地址将所述待插入至哈希表的关键值和结果值添加至所述哈希表。本专利技术实施例还提供了一种哈希冲突的处理装置,包括:处理器和存储器,其中,存储器中存储有以下可被处理器执行的指令:获取待插入至哈希表的关键值和结果值;利用预先设置的至少两个不同哈希函数分别对所述待插入至哈希表的关键值进行哈希运算,得到至少两个哈希值;根据获得的哈希值和预先建立的用于存储索引值的索引表确定出所述待插入至哈希表的关键值不会引起哈希冲突,为所述待插入至哈希表的关键值分配与历史索引值不相同的目标索引值;其中,所述历史索引值为与所述哈希表中已有的关键值对应的索引值;以所述目标索引值为地址将所述待插入至哈希表的关键值和结果值添加至所述哈希表。本专利技术实施例还提供了一种计算机可读存储介质,所述存储介质上存储有计算机可执行指令,所述计算机可执行指令用于执行以下步骤:获取待插入至哈希表的关键值和结果值;利用预先设置的至少两个不同哈希函数分别对所述待插入至哈希表的关键值进行哈希运算,得到至少两个哈希值;根据获得的哈希值和预先建立的用于存储索引值的索引表确定出所述待插入至哈希表的关键值不会引起哈希冲突,为所述待插入至哈希表的关键值分配与历史索引值不相同的目标索引值;其中,所述历史索引值为与所述哈希表中已有的关键值对应的索引值;以所述目标索引值为地址将所述待插入至哈希表的关键值和结果值添加至所述哈希表。与现有技术相比,由于确定待插入至哈希表的关键值是否会引起哈希冲突所根据的哈希值是基于至少两个哈希函数得到的,因此从不同的哈希函数出发减少了出现哈希冲突的概率,并且在确定出待插入至哈希表的关键值不会引起哈希冲突后,为待插入至哈希表的关键值分配哈希表中已存在的关键值对应的索引值不相同的目标索引值,因此以目标索引值作为在哈希表中即将插入关键值和结果值的地址,必然和哈希表中已存在的关键值的地址不相同,从而在不扩大哈希表的前提下减少了哈希冲突,节省了设备方面的开销,提高了哈希表的查找速度。本专利技术的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本专利技术而了解。本专利技术的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。附图说明附图用来提供对本专利技术技术方案的进一步理解,并且构成说明书的一部分,与本申请的实施例一起用于解释本专利技术的技术方案,并不构成对本专利技术技术方案的限制。图1为相关技术中的一种哈希表的结构示意图;图2为相关技术中的一种为处理哈希冲突而扩大的哈希表的结构示意图;图3为本专利技术实施例提供的一种哈希冲突的处理方法的流程示意图;图4为本专利技术实施例提供的一种索引表的结构示意图;图5为本专利技术实施例提供的一种哈希冲突的处理装置的结构示意图;图6为本专利技术实施例提供的另一种哈希冲突的处理装置的结构示意图。具体实施方式为使本专利技术的目的、技术方案和优点更加清楚明白,下文中将结合附图对本专利技术的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行。并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。图1为相关技术中的一种哈希表的结构示意图,图2为相关技术中的一种为处理哈希冲突而扩大的哈希表的结构示意图。如图1所示,该哈希表包含N个存储单元,如图2所示,该哈希表在图1所示的哈希表的基础上,对图1所示的哈希表的每个存储单元进行了扩大(即每个存储单元扩大为了4个slot),将图1所示的哈希表扩大为了具有4*N个存储单元的哈希表,出现哈希冲突时,不同key值存储在相同index指向的地址中的不同slot,有效地解决了哈希冲突。但是由于哈希表需要使用存储器对其进行存储,当扩大哈希表时,意味着存储哈希表需要更大容量的存储器,以本文档来自技高网...

【技术保护点】
1.一种哈希冲突的处理方法,包括:/n获取待插入至哈希表的关键值和结果值;/n利用预先设置的至少两个不同哈希函数分别对所述待插入至哈希表的关键值进行哈希运算,得到至少两个哈希值;/n根据获得的哈希值和预先建立的用于存储索引值的索引表确定出所述待插入至哈希表的关键值不会引起哈希冲突,为所述待插入至哈希表的关键值分配与历史索引值不相同的目标索引值;其中,所述历史索引值为与所述哈希表中已有的关键值对应的索引值;/n以所述目标索引值为地址将所述待插入至哈希表的关键值和结果值添加至所述哈希表。/n

【技术特征摘要】
1.一种哈希冲突的处理方法,包括:
获取待插入至哈希表的关键值和结果值;
利用预先设置的至少两个不同哈希函数分别对所述待插入至哈希表的关键值进行哈希运算,得到至少两个哈希值;
根据获得的哈希值和预先建立的用于存储索引值的索引表确定出所述待插入至哈希表的关键值不会引起哈希冲突,为所述待插入至哈希表的关键值分配与历史索引值不相同的目标索引值;其中,所述历史索引值为与所述哈希表中已有的关键值对应的索引值;
以所述目标索引值为地址将所述待插入至哈希表的关键值和结果值添加至所述哈希表。


2.根据权利要求1所述的处理方法,其特征在于,所述预先设置的至少两个不同哈希函数包括:第一哈希函数和第二哈希函数;
所述对所述待插入至哈希表的关键值进行哈希运算,得到至少两个哈希值包括:
利用所述第一哈希函数对所述待插入至哈希表的关键值进行哈希运算,得到第一哈希值;
利用所述第二哈希函数对所述待插入至哈希表的关键值进行哈希运算,得到第二哈希值。


3.根据权利要求2所述的处理方法,其特征在于,所述索引表包括:若干个地址;
所述地址包括:若干个位置;
所述位置包括:第一字段、第二字段和第三字段;其中,所述第一字段,用于存放利用所述第二哈希函数对关键值进行哈希运算得到的哈希值;所述第二字段,用于存放索引值;所述第三字段,用于存放表示所述位置是否被占用的标记;
其中,所述索引表的地址个数与每个地址的位置个数的乘积不小于所述哈希表的地址个数。


4.根据权利要求3所述的处理方法,其特征在于,所述根据获得的哈希值和预先建立的用于存储索引值的索引表确定出待插入至哈希表的关键值不会引起哈希冲突之前,还包括:
在所述索引表的地址中查找与所述第一哈希值对应的地址,作为目标地址;
判断所述目标地址中每一个位置是否被占用;
如果所述目标地址中所有位置都未被占用,确定所述待插入至哈希表的关键值不会引起所述哈希冲突;
如果所述目标地址中一部分位置被占用且剩余部分位置未被占用,利用所述第二哈希值和所述索引表判断所述待插入至哈希表的关键值是否会引起所述哈希冲突。


5.根据权利要求4所述的处理方法,其特征在于,所述利用第二哈希值和索引表判断待插入至哈希表的关键值是否会引起哈希冲突,包括:
获取所述目标地址中所有被占用位置的第一字段上的哈希值,作为待比较哈希值;
判断所述第二哈希值是否与所述待比较哈希值中任意一个哈希值相同;
如果所述第二哈希值与所述待比较哈希值中任意一个哈希值都不相同,确定所述待插入至哈希表的关键值不会引起所述哈希冲突。


6.根据权利要求4或5所述的处理方法,其特征在于,所述为待插入至哈希表的...

【专利技术属性】
技术研发人员:王磊刘明强
申请(专利权)人:中兴通讯股份有限公司
类型:发明
国别省市:广东;44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1