System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及数据处理,特别是涉及一种弹性哈希表的处理方法、装置、设备及介质。
技术介绍
1、哈希表(hash table):也常被称为散列表,是一种根据键(key)直接进行访问数据存储位置的数据结构,它提供了快速的数据插入和查找功能。哈希表通过使用键(key)和哈希函数(hash(key))计算出对应的哈希值,来实现对值的快速查找。然而哈希冲突在哈希表中是不可避免的现象,它发生在两个不同的键(keys)通过哈希函数计算后得到相同的索引。
2、目前,常见的处理哈希冲突的方法包括:链地址法、开放地址法、再哈希法以及双重哈希法等。由于上述处理方法是采用数组和链表结合来解决哈希冲突,仍旧存在以下问题:1)初始容量确定后难于扩展,当哈希表被填满时,查找性能下降得非常严重;2)哈希冲突较严重时,会导致某条链表长度过长,哈希表查找会退化成链表遍历。因此,亟须一种有效的方案解决上述问题。
技术实现思路
1、鉴于上述问题,提出了本专利技术以便提供克服上述问题或者至少部分地解决上述问题的一种弹性哈希表的处理方法、装置、设备及介质。
2、为实现上述目的及其他相关目的,本专利技术提供一种弹性哈希表的处理方法,所述弹性哈希表包括新哈希桶和旧哈希桶,所述旧哈希桶为进行扩容或缩容操作之前,所述弹性哈希表所使用的哈希桶;所述新哈希桶为进行扩容或缩容操作时,所述弹性哈希表所使用的哈希桶,所述方法包括:
3、输入待处理的键值,并根据所述待处理的键值、新旧哈希桶的哈希因子和哈希函数
4、根据所述新旧哈希值,在所述新旧哈希桶内进行查找、插入或删除;
5、在检测到插入或删除操作时,计算所述弹性哈希表的负载因子和散列系数,且利用所述负载因子或散列系数,更新所述弹性哈希表状态。
6、可选地,所述输入待处理的键值的步骤之前,还包括:
7、创建弹性哈希表,与此同时,在所述弹性哈希表中创建一个新哈希桶;其中,新哈希桶由多个用于存储指定数量元素的哈希桶指针组成。
8、可选地,所述根据所述新旧哈希值,在所述新旧哈希桶内进行查找,包括:
9、将旧哈希值映射到所述旧哈希桶,确定对应的第一索引位置;
10、对所述第一索引位置指向的哈希桶及溢出桶进行遍历,采用预设对比函数比较所述待处理的键值;
11、在所述待处理的键值存在时,返回查找成功指示,并结束查找操作。
12、可选地,所述对所述第一索引位置指向的哈希桶及溢出桶进行遍历,采用预设对比函数比较所述待处理的键值的步骤之后,还包括:
13、在所述待处理的键值不存在时,则进入所述新哈希桶中进行查找;
14、将所述新哈希值映射到所述新哈希桶,确定对应的第二索引位置;
15、对所述第二索引位置指向的哈希桶及溢出桶进行遍历,采用预设对比函数比较所述待处理的键值;
16、在所述待处理的键值存在时,返回查找成功指示,并结束查找操作。
17、可选地,所述根据所述新旧哈希值,在所述新旧哈希桶内进行插入,包括:
18、根据所述新旧哈希值,在所述弹性哈希表中查找是否存在所述待处理的键值;
19、在所述待处理的键值不存在时,检查所述弹性哈希表的当前状态;
20、在检测到所述弹性哈希表处于目标状态,且所述旧哈希桶为空时,将所述旧哈希桶指向新哈希桶;
21、将所述新哈希值映射到所述新哈希桶,确定对应的第二索引位置;
22、将所述待处理的键值装入所述第二索引位置指向的哈希桶中;
23、遍历确定个数的所述旧哈希桶,并将所述旧哈希桶中的数据迁移至所述新哈希桶。
24、可选地,所述根据所述新旧哈希值,在所述新旧哈希桶内进行删除,包括:
25、根据所述新旧哈希值,在所述弹性哈希表中查找所述待处理的键值以获得查找结果;
26、根据查找结果将所述待处理的键值从所述弹性哈希表中删除;
27、在检测到所述弹性哈希表处于目标状态时,将所述旧哈希桶中的数据迁移至所述新哈希桶。
28、可选地,所述根据查询结果将所述待处理的键值从所述弹性哈希表中删除,包括:
29、若检测到所述待处理的键值位于溢出桶时,则将所述待处理的键值从所述溢出桶中删除,且在检测到所述溢出桶中没有其他数据时,释放所述溢出桶内存;
30、若检测到所述待处理的键值位于哈希桶中,则将所述待处理的键值从所述哈希桶中删除,且在检测到所述哈希桶中没有其他数据时,释放所述哈希桶内存。
31、第二方面,本专利技术还提供一种弹性哈希表的处理装置,所述弹性哈希表包括新哈希桶和旧哈希桶,所述旧哈希桶为进行扩容或缩容操作之前,所述弹性哈希表所使用的哈希桶;所述新哈希桶为进行扩容或缩容操作时,所述弹性哈希表所使用的哈希桶,所述装置包括:
32、计算模块,用于输入待处理的键值,并根据所述待处理的键值、新旧哈希桶的哈希因子和哈希函数,计算出所述待处理的键值的新旧哈希值;
33、处理模块,用于根据所述新旧哈希值,在所述新旧哈希桶内进行查找、插入或删除;
34、更新模块,用于在检测到插入或删除操作时,计算所述弹性哈希表的负载因子和散列系数,且利用所述负载因子或散列系数,更新所述弹性哈希表状态。
35、第三方面,本专利技术提供一种电子设备,所述电子设备包括:存储器与处理器;所述存储器用于存储计算机程序;所述处理器用于执行所述存储器存储的计算机程序,以使所述电子设备执行如上所述弹性哈希表的处理方法的步骤。
36、第四方面,本专利技术还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被电子设备执行时实现如上所述的弹性哈希表的处理方法的步骤。
37、本专利技术提供的上述一个或多个技术方案,可以具有如下优点或至少实现了如下技术效果:
38、本专利技术的弹性哈希表的处理方法、装置、设备及介质,所述弹性哈希表包括新哈希桶和旧哈希桶,所述旧哈希桶为进行扩容或缩容操作之前,所述弹性哈希表所使用的哈希桶;所述新哈希桶为进行扩容或缩容操作时,所述弹性哈希表所使用的哈希桶;所述方法包括:输入待处理的键值,并根据所述待处理的键值、新旧哈希桶的哈希因子和哈希函数,分别计算出所述待处理的键值的新旧哈希值;根据所述新旧哈希值,在所述新旧哈希桶内进行查找、插入或删除;在检测到插入或删除操作时,计算所述弹性哈希表的负载因子和散列系数,且利用所述负载因子或散列系数,更新所述弹性哈希表状态。
39、由此,本专利技术通过对弹性哈希表采用新哈希桶和旧哈希桶相结合的方式,实现了弹性哈希表容量的动态管理;同时在弹性哈希表中引入负载因子和散列系数,解决了传统哈希表难于扩展和数据查找退化成遍历链表的技术问题。
本文档来自技高网...【技术保护点】
1.一种弹性哈希表的处理方法,其特征在于,所述弹性哈希表包括新哈希桶和旧哈希桶,所述旧哈希桶为进行扩容或缩容操作之前,所述弹性哈希表所使用的哈希桶;所述新哈希桶为进行扩容或缩容操作时,所述弹性哈希表所使用的哈希桶,所述方法包括:
2.根据权利要求1所述的方法,其特征在于,所述输入待处理的键值的步骤之前,还包括:
3.根据权利要求1所述的方法,其特征在于,所述根据所述新旧哈希值,在所述新旧哈希桶内进行查找,包括:
4.根据权利要求3所述的方法,其特征在于,所述对所述第一索引位置指向的哈希桶及溢出桶进行遍历,采用预设对比函数比较所述待处理的键值的步骤之后,还包括:
5.根据权利要求1所述的方法,其特征在于,所述根据所述新哈希值,在所述新哈希桶内进行插入,包括:
6.根据权利要求1所述的方法,其特征在于,所述根据所述新旧哈希值,在所述新旧哈希桶内进行删除,包括:
7.根据权利要求6所述的方法,其特征在于,所述根据查找结果将所述待处理的键值从所述弹性哈希表中删除,包括:
8.一种弹性哈希表的处理装置,其特
9.一种电子设备,其特征在于,所述电子设备包括:存储器与处理器,其中,所述存储器用于存储计算机程序,所述处理器用于执行所述计算机程序时实现权利要求1至7中任一项所述方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有程序,所述程序运行时,用于执行时实现权利要求1至7中任一项所述方法的步骤。
...【技术特征摘要】
1.一种弹性哈希表的处理方法,其特征在于,所述弹性哈希表包括新哈希桶和旧哈希桶,所述旧哈希桶为进行扩容或缩容操作之前,所述弹性哈希表所使用的哈希桶;所述新哈希桶为进行扩容或缩容操作时,所述弹性哈希表所使用的哈希桶,所述方法包括:
2.根据权利要求1所述的方法,其特征在于,所述输入待处理的键值的步骤之前,还包括:
3.根据权利要求1所述的方法,其特征在于,所述根据所述新旧哈希值,在所述新旧哈希桶内进行查找,包括:
4.根据权利要求3所述的方法,其特征在于,所述对所述第一索引位置指向的哈希桶及溢出桶进行遍历,采用预设对比函数比较所述待处理的键值的步骤之后,还包括:
5.根据权利要求1所述的方法,其特征在于,所述根据所述新哈希值,在所述新哈希桶内进行插入,包括:
6.根据权利要求1所述的方法,其特征在于,所...
【专利技术属性】
技术研发人员:张伟,卢笙,沈洋,
申请(专利权)人:芯云晟杭州电子科技有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。