[发明专利]一种根据数据量的大小动态调节哈希表组的方法有效
申请号: | 201910692326.8 | 申请日: | 2019-07-30 |
公开(公告)号: | CN110413617B | 公开(公告)日: | 2021-08-10 |
发明(设计)人: | 高银康;王俊昌;朱彤;张阳阳 | 申请(专利权)人: | 南京邮电大学 |
主分类号: | G06F16/22 | 分类号: | G06F16/22;G06F16/23;G06F16/2455 |
代理公司: | 南京苏高专利商标事务所(普通合伙) 32204 | 代理人: | 柏尚春 |
地址: | 210023 江*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 根据 数据量 大小 动态 调节 哈希表组 方法 | ||
1.一种根据数据量的大小动态调节哈希表组的方法,其特征在于,包括:
接收用户指令,所述用户指令包括查询指令、删除指令或插入指令;
根据所述用户指令在哈希表组中进行相应的元素查询操作、元素删除操作或元素插入操作,并实时记录当前哈希表组中已插入元素的个数;所述元素插入操作包括:基于所述用户指令分析出待插入元素,根据插入规则将所述待插入元素插入当前哈希表组中;所述插入规则包括在确定当前哈希表组已被插满后,在当前最后一张哈希表后新增一张哈希表用于完成插入;所述哈希表组中的每一元素具有相应的状态位,所述状态位为第一值、第二值和第三值中的一者;
在当前哈希表组中已插入元素的个数低于阈值时,执行表删除操作,所述表删除操作包括:将当前最后一张哈希表作为待删除哈希表,遍历其中的每一元素,每遍历到一个元素,将当前元素复制到其余哈希表中,且在遍历完成后将所述待删除哈希表删除;
所述表删除操作中,将当前元素复制到其余哈希表中具体包括:
运用原子操作将当前元素的状态位设为所述第二值;
创建当前元素的副本元素,将副本元素按照所述插入规则插入除所述待删除表外的其余哈希表中,并在插入成功后判断所述当前元素的状态位是否变为所述第三值,若变为所述第三值则删除插入成功的副本元素;反之,则保留复制后的元素;
所述元素删除操作包括:
基于所述删除指令确定待删除元素,顺序遍历所述哈希表组,查询是否存在数据位与所述待删除元素匹配的元素;
当不存在匹配的元素时,反馈删除失败;
当在除所述待删除表外的其他哈希表中查询到匹配的元素时,则直接将查询到的元素删除;
当在所述待删除表中查询到匹配的元素时:
若查询到的元素的状态位的值为所述第一值,说明所述表删除操作还没有开始复制查询到的元素,则在所述待删除表中直接删除查询到的元素,并反馈删除成功;
若查询到的元素的状态位的值为所述第二值,则将查询到的元素的状态位的值设为所述第三值,并判断所述表删除操作是否正在复制查询到的元素:若正在复制,则反馈删除成功;若不在复制,则再次遍历一遍整个哈希表组,查询是否存在数据位与所述待删除元素匹配的元素,若查询到,则反馈删除成功,若查询不到,则反馈删除失败;
若查询到的元素的状态位为所述第三值,则反馈删除成功。
2.根据权利要求1所述的根据数据量的大小动态调节哈希表组的方法,其特征在于,所述阈值与当前哈希表组中哈希表的数目成正比。
3.根据权利要求1所述的根据数据量的大小动态调节哈希表组的方法,其特征在于,所述元素查询操作、所述元素删除操作或所述元素插入操作与所述哈希表删除操作是并行执行的。
4.根据权利要求1所述的根据数据量的大小动态调节哈希表组的方法,其特征在于,所述表删除操作中,将当前元素复制到其余哈希表中具体包括:
运用原子操作将当前元素的状态位设为所述第二值;
创建当前元素的副本元素,将副本元素按照所述插入规则插入除所述待删除表外的其余哈希表中,并在插入成功后判断所述当前元素的状态位是否变为所述第三值,若变为所述第三值则删除插入成功的副本元素;反之,则保留复制后的元素。
5.根据权利要求1所述的根据数据量的大小动态调节哈希表组的方法,其特征在于,所述元素查询操作包括:
基于所述查询指令确定待查询元素,在整个哈希表组中查询是否存在数据位与所述待查询元素匹配的元素;
当存在匹配的元素时:若查询到的元素的状态位为所述第一值或所述第二值,则反馈查询成功;若查询到的元素的状态位的值为所述第三值,则反馈查询失败;
当不存在匹配的元素时,则反馈查询失败。
6.根据权利要求1所述的根据数据量的大小动态调节哈希表组的方法,其特征在于,所述插入规则包括:
(a)按照各哈希表的序号,依次确定所述待插入元素在除所述待删除表外的各可访问哈希表中的对应位置是否被已插入元素占据,一旦确定所述待插入元素在某一可访问哈希表中的对应位置未被占据,则将所述待插入元素插入,将插入成功的元素的状态位设为所述第一值,并反馈插入成功,结束;如果所述待插入元素在所有可访问哈希表中的对应位置均被已插入元素占据,则用所述待插入元素替换第一哈希表中对应位置的已插入元素,令当前替换次数为1,将被替换元素作为当前待插入元素,并执行步骤(b);
(b)从当前待插入元素被替换时所在哈希表的下一哈希表开始,至最后一个可访问哈希表,按哈希表的序号依次确定当前待插入元素在各哈希表中的对应位置是否被已插入元素占据;一旦确定当前待插入元素在某一可访问哈希表中的对应位置未被占据,则将当前待插入元素插入,将插入成功的元素的状态位设为所述第一值,并反馈插入成功,结束;如果当前待插入元素在后续可访问哈希表中的对应位置均被已插入元素占据,则执行步骤(c);
(c)用当前待插入元素替换其被替换时所在哈希表的下一哈希表中对应位置的元素,令当前替换次数加1,并判断当前替换次数是否超过设定的最大替换次数,如果没有超过,则将最新被替换元素作为当前待插入元素,返回执行步骤(b)若超过,则认为当前哈希表组已满,在最后一个可访问哈希表后新增一个大小相等的可访问哈希表,并在新增可访问哈希表中插入当前待插入元素,插入成功后将状态位设为所述第一值,反馈插入成功。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京邮电大学,未经南京邮电大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910692326.8/1.html,转载请声明来源钻瓜专利网。