基于哈希表的表项处理方法及其装置制造方法及图纸

技术编号:7786547 阅读:196 留言:0更新日期:2012-09-21 07:37
本发明专利技术公开了一种基于哈希表的表项处理方法及其装置,其方法包括步骤:在表项存储时,将待存储表项按照顺序排布方式,存储于结果表中;利用索引表的两重哈希函数,计算所述待存储表项的键值的哈希值;将所述哈希值和所述待存储表项所在结果表的地址指针存储于所述索引表中空闲的位置。本发明专利技术在保证了较少的访问次数和较快的查询速度的同时,有效提高了业务表项条目存储量,增加了哈希表所能支持业务的容量,使哈希表的空间利用率高,并且还降低了冲突发生的概率,使哈希表的性能与容量之间达到平衡。

【技术实现步骤摘要】

本专利技术涉及到通信
,特别涉及到基于哈希表的表项处理方法及其装置
技术介绍
在通信
中,常常采用哈希算法进行业务表项的精确匹配查询。采用哈希函数对业务表项条目的键值进行哈希运算,得到的计算结果值与哈希表中的存储空间相对应,即通过哈希运算结果寻址,以实现对表项的存储与查询。目前的哈希存储与查询方法中,普遍存在的问题是性能与容量之间的矛盾。在哈希运算时,虽然各个表项的键值不同,但是经哈希函数计算获得的运算结果却可能相同,这将导致存储空间发生冲突。一方面,为了尽量减少冲突,保证查询性能,即一次命中率,传统 哈希表结构在表项存储时采用哈希方式排布,即通过哈希函数获得的存储地址往往不是连续的,因而哈希表的空间利用率不高,在表项存储时会造成非常大的存储空间浪费,所能存储的表项条目不多,容量指标无法满足。另一方面,为了提高查找速度,传统的哈希表结构大多通过一次哈希计算结果来索引到哈希索引表进行查找,但这将大大增加冲突的概率。
技术实现思路
本专利技术的主要目的为提供一种提高存储容量、减少冲突概率的基于哈希表的表项处理方法及其装置。本专利技术提出一种基于哈希表的表项处理方法,包括步骤在表项存储时,将待存储表项按照顺序排布方式,存储于结果表中;利用索引表的两重哈希函数,计算所述待存储表项的键值的哈希值;将所述哈希值和所述待存储表项所在结果表的地址指针存储于所述索引表中空闲的位置。优选地,所述利用索引表的两重哈希函数,计算所述待存储表项的键值哈希值;将所述哈希值和所述待存储表项所在结果表的地址指针存储于所述索引表中空闲的位置的步骤具体包括利用当前索引表的两重哈希函数,计算所述待存储表项的键值的当前哈希值;在当前哈希值无冲突时,将当前哈希值和所述待存储表项所在结果表的地址指针存储于当前索引表中空闲的位置;在当前哈希值有冲突时,利用下一索引表的两重哈希函数,计算所述待存储表项的键值的下一哈希值;在下一哈希值无冲突时,将下一哈希值和所述待存储表项所在结果表的地址指针存储于下一索引表中空闲的位置。优选地,所述利用当前索引表的两重哈希函数,计算所述待存储表项的键值的当前哈希值;在当前哈希值无冲突时,将当前哈希值和所述待存储表项所在结果表的地址指针存储于当前索引表中空闲的位置的步骤具体包括利用当前索引表的第一重哈希函数,对所述待存储表项的键值进行哈希计算,在当iu索引表中获得对应的索引;利用当前索引表的第二重哈希函数,计算所述待存储表项的键值的当前哈希值;在当前哈希值与对应的索引中各槽位存储的哈希值无冲突时,将当前哈希值和所述待存储表项所在结果表的地址指针,存储于对应的索引中空闲的槽位。优选地, 所述在当前哈希值有冲突时,利用下一索引表的两重哈希函数,计算所述待存储表项的键值的下一哈希值;在下一哈希值无冲突时,将下一哈希值和所述待存储表项所在结果表的地址指针存储于下一索引表中空闲的位置的步骤具体包括在当前哈希值与对应的索引中一槽位存储的哈希值发生冲突时,将冲突槽位中存储的冲突表项所在结果表的地址指针取出,并在所述冲突槽位中设置冲突标识;利用下一索引表的第一重哈希函数,分别对所述待存储表项的键值和冲突表项的键值进行哈希计算,在下一索引表中分别获得对应的索引;利用下一索引表的第二重哈希函数,分别计算所述待存储表项的键值和冲突表项的键值的下一哈希值;在所述待存储表项的下一哈希值与对应的索引中各槽位存储的哈希值无冲突时,将所述待存储表项的下一哈希值和所在结果表的地址指针,存储于对应的索引中空闲的槽位;在所述冲突表项的下一哈希值与对应的索引中各槽位存储的哈希值无冲突时,将所述冲突表项的下一哈希值和所在结果表的地址指针,存储于对应的索引中空闲的槽位。优选地,所述在当前哈希值与对应的索引中一槽位存储的哈希值发生冲突时,将冲突槽位中存储的冲突表项所在结果表的地址指针取出,并在所述冲突槽位中设置冲突标识的步骤之后还包括在当前索引表为最后一张索引表时,将所述待存储表项和冲突表项所在结果表的地址指针分别存储于冲突链表中,并将冲突链表指针存储于最后一张索引表的冲突槽位中。优选地,所述将所述哈希值和所述待存储表项所在结果表的地址指针存储于所述索引表中空闲的位置的步骤之后还包括在表项查询时,利用索引表的两重哈希函数,计算待查询键值的哈希值;在所述索引表中,查找所述哈希值所在位置存储的地址指针;读取所述地址指针指向的结果表中存储的表项。优选地,所述在表项查询时,利用索引表的两重哈希函数,计算待查询键值的哈希值;在所述索引表中查找所述哈希值所在位置存储的地址指针;读取所述地址指针指向的结果表中存储的表项的步骤具体包括利用各索引表的第一重哈希函数,对所述待查询键值进行哈希计算,在所述索引表中查询对应的索引;利用各索引表的第二重哈希函数,计算所述待查询键值的哈希值,在所述索引中查询所述哈希值对应的槽位;当对应的槽位存储的地址指针有效时,读取所述地址指针指向的结果表中存储的表项;当所有对应的槽位存储的地址指针均无效,且最后一张哈希表中对应的槽位中设置有冲突标记时,查询最后一张哈希表中对应的槽位存储的冲突链表指针;查询所述冲突链表指针指向的冲突链表中存储的地址指针;读取所述地址指针指向的结果表中存储的表项。优选地,所述当对应的槽位存储的地址指针有效时,读取所述地址指针指向的结果表中存储的表项的步骤具体包括 当存在多个有效的地址指针时,比较各有效的地址指针所在索引表的优先级;查询优先级最高的索引表存储的有效的地址指针;读取所述地址指针指向的结果表中存储的表项。本专利技术还提出一种基于哈希表的表项处理装置,包括存储模块,用于在表项存储时,将待存储表项按照顺序排布方式,存储于结果表中;利用索引表的两重哈希函数,计算所述待存储表项的键值的哈希值;将所述哈希值和所述待存储表项所在结果表的地址指针存储于所述索引表中空闲的位置。优选地,所述存储模块具体用于利用当前索引表的两重哈希函数,计算所述待存储表项的键值的当前哈希值;在当前哈希值无冲突时,将当前哈希值和所述待存储表项所在结果表的地址指针存储于当前索引表中空闲的位置;在当前哈希值有冲突时,利用下一索引表的两重哈希函数,计算所述待存储表项的键值的下一哈希值;在下一哈希值无冲突时,将下一哈希值和所述待存储表项所在结果表的地址指针存储于下一索引表中空闲的位置。优选地,所述存储模块具体包括第一哈希运算子模块,用于利用当前索引表的第一重哈希函数,对所述待存储表项的键值进行哈希计算,在当前索引表中获得对应的索引;第二哈希运算子模块,用于利用当前索引表的第二重哈希函数,计算所述待存储表项的键值的当前哈希值;地址指针存储子模块,用于在当前哈希值与对应的索引中各槽位存储的哈希值无冲突时,将当前哈希值和所述待存储表项所在结果表的地址指针,存储于对应的索引中空闲的槽位。优选地,所述存储模块具体还包括冲突处理子模块,用于在当前哈希值与对应的索引中一槽位存储的哈希值发生冲突时,将冲突槽位中存储的冲突表项所在结果表的地址指针取出,并在所述冲突槽位中设直冲关标识;所述第一哈希运算子模块还用于,利用下一索引表的第一重哈希函数,分别对所述待存储表项的键值和冲突表项的键值进行哈希计算,在下一索引表中分别获得对应的索弓I ;所述第二哈希运算子模块还用于,利用本文档来自技高网...

【技术保护点】

【技术特征摘要】
1.一种基于哈希表的表项处理方法,其特征在于,包括步骤 在表项存储时,将待存储表项按照顺序排布方式,存储于结果表中; 利用索引表的两重哈希函数,计算所述待存储表项的键值的哈希值; 将所述哈希值和所述待存储表项所在结果表的地址指针存储于所述索引表中空闲的位置。2.根据权利要求I所述的基于哈希表的表项处理方法,其特征在于,所述利用索引表的两重哈希函数,计算所述待存储表项的键值哈希值;将所述哈希值和所述待存储表项所在结果表的地址指针存储于所述索引表中空闲的位置的步骤具体包括 利用当前索引表的两重哈希函数,计算所述待存储表项的键值的当前哈希值; 在当前哈希值无冲突时,将当前哈希值和所述待存储表项所在结果表的地址指针存储于当前索引表中空闲的位置; 在当前哈希值有冲突时,利用下一索引表的两重哈希函数,计算所述待存储表项的键值的下一哈希值; 在下ー哈希值无冲突时,将下一哈希值和所述待存储表项所在结果表的地址指针存储于下一索引表中空闲的位置。3.根据权利要求2所述的基于哈希表的表项处理方法,其特征在干,所述利用当前索引表的两重哈希函数,计算所述待存储表项的键值的当前哈希值;在当前哈希值无冲突时,将当前哈希值和所述待存储表项所在结果表的地址指针存储于当前索引表中空闲的位置的步骤具体包括 利用当前索引表的第一重哈希函数,对所述待存储表项的键值进行哈希计算,在当前索引表中获得对应的索引; 利用当前索引表的第二重哈希函数,计算所述待存储表项的键值的当前哈希值; 在当前哈希值与对应的索引中各槽位存储的哈希值无冲突时,将当前哈希值和所述待存储表项所在结果表的地址指针,存储于对应的索引中空闲的槽位。4.根据权利要求3所述的基于哈希表的表项处理方法,其特征在于,所述在当前哈希值有冲突时,利用下一索引表的两重哈希函数,计算所述待存储表项的键值的下ー哈希值;在下ー哈希值无冲突时,将下一哈希值和所述待存储表项所在结果表的地址指针存储于下一索引表中空闲的位置的步骤具体包括 在当前哈希值与对应的索引中一槽位存储的哈希值发生冲突时,将冲突槽位中存储的冲突表项所在结果表的地址指针取出,并在所述冲突槽位中设置冲突标识; 利用下一索引表的第一重哈希函数,分别对所述待存储表项的键值和冲突表项的键值进行哈希计算,在下一索引表中分别获得对应的索引; 利用下一索引表的第二重哈希函数,分别计算所述待存储表项的键值和冲突表项的键值的下一哈希值; 在所述待存储表项的下一哈希值与对应的索引中各槽位存储的哈希值无冲突时,将所述待存储表项的下一哈希值和所在结果表的地址指针,存储于对应的索引中空闲的槽位;在所述冲突表项的下一哈希值与对应的索引中各槽位存储的哈希值无冲突吋,将所述冲突表项的下一哈希值和所在结果表的地址指针,存储于对应的索引中空闲的槽位。5.根据权利要求4所述的基于哈希表的表项处理方法,其特征在于,所述在当前哈希值与对应的索引中一槽位存储的哈希值发生冲突时,将冲突槽位中存储的冲突表项所在结果表的地址指针取出,并在所述冲突槽位中设置冲突标识的步骤之后还包括 在当前索引表为最后ー张索引表吋,将所述待存储表项和冲突表项所在结果表的地址指针分别存储于冲突链表中,并将冲突链表指针存储于最后ー张索引表的冲突槽位中。6.根据权利要求5所述的基于哈希表的表项处理方法,其特征在于,所述将所述哈希值和所述待存储表项所在结果表的地址指针存储于所述索引表中空闲的位置的步骤之后还包括 在表项查询时,利用索引表的两重哈希函数,计算待查询键值的哈希值; 在所述索引表中,查找所述哈希值所在位置存储的地址指针; 读取所述地址指针指向的结果表中存储的表项。7.根据权利要求6所述的基于哈希表的表项处理方法,其特征在干,所述在表项查询时,利用索引表的两重哈希函数,计算待查询键值的哈希值;在所述索引表中查找所述哈希值所在位置存储的地址指针;读取所述地址指针指向的结果表中存储的表项的步骤具体包括 利用各索引表的第一重哈希函数,对所述待查询键值进行哈希计算,在所述索引表中查询对应的索引; 利用各索引表的第二重哈希函数,计算所述待查询键值的哈希值,在所述索引中查询所述哈希值对应的槽位; 当对应的槽位存储的地址指针有效时,读取所述地址指针指向的结果表中存储的表项; 当所有对应的槽位存储的地址指针均无效,且最后一张哈希表中对应的槽位中设置有冲突标记时,查询最后一张哈希表中对应的槽位存储的冲突链表指针; 查询所述冲突链表指针指向的冲突链表中存储的地址指针; 读取所述地址指针指向的结果表中存储的表项。8.根据权利要求7所述的基于哈希表的表项处理方法,其...

【专利技术属性】
技术研发人员:孙远航张炜史顺达陈伟
申请(专利权)人:中兴通讯股份有限公司
类型:发明
国别省市:

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

1