哈希表管理方法及装置的制作方法

文档序号:6353403阅读:283来源:国知局
专利名称:哈希表管理方法及装置的制作方法
技术领域
本发明涉及通信领域,具体而言,涉及一种哈希表管理方法及装置。
背景技术
在网络通信领域,表的查找是必不可少的,例如媒体接入控制(Media Access Control,简称为MAC)表的查找、地址解析协议(Address Resolution Protocol,简称为 ARP)表的查找、访问控制列表(Access Control List,简称为ACL)的查找、多协议标签交 换(Multi-Protocol Label Switching,简称为MPLS)表的查找。为了快速获得查表结果, 哈希表是一种广泛应用的方法,利用哈希表,可以一次存取便得到所查记录。哈希表的基本思想为在记录的存储位置和它的关键字之间建立一个确定的对应 关系F,使得每个关键字和哈希存储表中一个唯一的存储地址相对应。因而在查找时,只需 要根据这个对应关系F找到给定值K的像F (K)。若结构中存在与关键字K相等的记录,则 必定在F(K)的存储位置上,由此,不需要进行比较便可直接取得所查记录。而对应关系F 就为哈希函数,按照这个基本思想建立的表为哈希表。但是,对不同的关键字执行F(K)计算,可能得到同一哈希地址,即keyl兴key2,而 F(keyl) =F(key2),这种现象称为哈希冲突。为解决哈希冲突,通常做法是在同一哈希地 址下建立哈希桶,每个哈希桶能存储N个记录。在查找时,首先通过哈希函数F找到给定值 K的哈希地址F (K),然后以F (K)为地址读出其哈希桶内的N个记录。最后以关键字K对读 出的N个记录进行精确匹配,如有发现匹配的则查找成功,否则查找失败。但是,上述解决哈希冲突的方法存在的弊端是,哈希表内的每个记录都需要存储 关键字K的值,以便在哈希表查找时进行精确匹配。这种方法增加了哈希表的存储宽度,从 而增加了硬件实现空间,增大了资源消耗。

发明内容
针对相关技术中哈希表内的每个记录都需要存储关键字的值的问题而提出本发 明,为此,本发明的主要目的在于提供一种哈希表管理方法及装置,以解决上述问题。为了实现上述目的,根据本发明的一个方面,提供了 一种哈希表管理方法。根据本发明的哈希表管理方法包括获取待写入哈希表中的内容的关键字;使用 主哈希函数和子哈希函数对关键字进行计算,得到哈希表中的空闲记录的地址;将待写入 哈希表中的内容和空闲记录的地址写入空闲记录的地址对应的空闲记录。进一步地,使用主哈希函数和子哈希函数对关键字进行计算,得到哈希表中的空 闲记录的地址包括使用主哈希函数计算关键字对应的第一地址;根据第一地址,获取哈 希表中的哈希桶中的多条空闲记录;使用子哈希函数计算关键字对应的第二地址,其中第 二地址为多条空闲记录中的一条空闲记录的地址;确定第二地址为哈希表中的空闲记录的 地址。进一步地,在使用子哈希函数计算关键字对应的第二地址之前,上述方法还包括在多个子哈希函数中确定一个子哈希函数;在多条空闲记录中写入确定的子哈希函数在多 个子哈希函数中的序列号。进一步地,根据哈希表的深度和哈希桶的深度确定主哈希函数计算结果的位宽。进一步地,根据空闲记录的地址的位宽确定子哈希函数计算结果的位宽。为了实现上述目的,根据本发明的一个方面,还提供了 一种哈希表管理方法。根据本发明的哈希表管理方法包括使用主哈希函数和子哈希函数对关键字进行 计算,得到哈希表中的空闲记录的地址;查找写有空闲记录的地址的空闲记录;获取空闲 记录中的内容。进一步地,使用主哈希函数和子哈希函数对关键字进行计算,得到哈希表中的空 闲记录的地址包括使用主哈希函数计算关键字对应的第一地址;根据第一地址,获取哈 希表中的哈希桶中的多条空闲记录;使用子哈希函数计算关键字对应的第二地址,其中第 二地址为多条空闲记录中的一条空闲记录的地址;确定第二地址为哈希表中的空闲记录的 地址。进一步地,在使用子哈希函数计算关键字对应的第二地址之前,上述方法还包括 在多个子哈希函数中确定一个子哈希函数;在多条空闲记录中写入确定的子哈希函数在多 个子哈希函数中的序列号。为了实现上述目的,根据本发明的另一个方面,提供了 一种哈希表管理装置。根据本发明的哈希表管理装置包括第一获取模块,用于获取待写入哈希表中的 内容的关键字;第一计算模块,用于使用主哈希函数和子哈希函数对关键字进行计算,得到 哈希表中的空闲记录的地址;写入模块,用于将待写入哈希表中的内容和空闲记录的地址 写入空闲记录的地址对应的空闲记录。为了实现上述目的,根据本发明的另一个方面,还提供了 一种哈希表管理装置。根据本发明的哈希表管理装置包括第二计算模块,使用主哈希函数和子哈希函 数对关键字进行计算,得到哈希表中的空闲记录的地址;查找模块,用于查找写有空闲记录 的地址的空闲记录;第二获取模块,用于获取空闲记录中的内容。通过本发明,使用主哈希函数和子哈希函数对关键字进行计算,从而得到哈希表 中的待写入的地址,可以充分利用该关键字和哈希地址之间的关联性,从而减少哈希表的 存储宽度,进而减小硬件实现空间,减小资源消耗。


此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发 明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中图1是根据相关技术的哈希表的存储结构的示意图;图2是根据本发明实施例的哈希表的存储结构的示意图;图3是根据本发明实施例的哈希表管理方法的流程图一;图4是根据本发明实施例的哈希表管理方法的流程图二 ;图5是根据本发明实施例的哈希表建立过程的流程图;图6是根据本发明实施例的哈希表查找过程的流程图;图7是根据本发明实施例的哈希表管理装置的结构框图一;
图8是根据本发明实施例的哈希表管理装置的结构框图二。
具体实施例方式需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相 互组合。下面将参考附图并结合实施例来详细说明本发明。图2是根据本发明实施例的哈希表的存储结构的示意图,如图2所示,存储的内容 为子哈希函数选择位(F_SEL)、子哈希函数计算结果(F_VAL)、哈希表动作(F_ACT)。本发明实施例提供了一种哈希表管理方法。图3是根据本发明实施例的哈希表管 理方法的流程图一,如图3所示,包括如下的步骤S302至步骤S306。步骤S302,获取待写入哈希表中的内容的关键字。步骤S304,使用主哈希函数和子哈希函数对关键字进行计算,得到哈希表中的空 闲记录的地址。步骤S306,将待写入哈希表中的内容和空闲记录的地址写入空闲记录的地址对应 的空闲记录。相关技术中,哈希表内的每个记录都需要存储关键字的值,以便在哈希表查找时 进行精确匹配。本发明实施例中,使用主哈希函数和子哈希函数对关键字进行计算,从而得 到哈希表中的待写入的地址,这样可以充分利用该关键字和哈希地址之间的关联性,从而 减少哈希表的存储宽度,进而减小硬件实现空间,减小资源消耗。优选地,预先规划出哈希表存储空间;建立主哈希函数F_MAIN并建立N个子哈希
函数Fl,F2,F3.....Fn ;其中主哈希函数?_默讯和N个子哈希函数(F1, F2,F3. . . Fn)需
要保证能将同一关键字K值,映射到不同空间。优选地,每条哈希表中的空闲记录,需要开辟出如下的比特空间①、η比特空间,记作F_SEL,用于标志本记录采用的子哈希函数;2、彡N。当这η 比特空间的值为m时,说明其采用的子哈希函数为Fm ;②、A比特空间,记作F_VAL,用于存储Fm⑷的值;③、B比特空间,记作F_ACTI0N,用于存储其他信息,如哈希表命中之后的动作信
肩、^^ ο优选地,使用主哈希函数和子哈希函数对关键字进行计算,得到哈希表中的空闲 记录的地址包括使用主哈希函数计算关键字对应的第一地址;根据第一地址,获取哈希 表中的哈希桶中的多条空闲记录;使用子哈希函数计算关键字对应的第二地址,其中第二 地址为多条空闲记录中的一条空闲记录的地址;确定第二地址为哈希表中的空闲记录的地 址。优选地,在使用子哈希函数计算关键字对应的第二地址之前,上述方法还包括在 多个子哈希函数中确定一个子哈希函数;在多条空闲记录中写入确定的子哈希函数在多个 子哈希函数中的序列号。具体地,在哈希桶内的空闲记录的F_SEL域写入确定的子哈希函数在多个子哈希 函数中的序列号。优选地,根据哈希表的深度和哈希桶的深度确定主哈希函数计算结果的位宽。优选地,根据空闲记录的地址的位宽确定子哈希函数计算结果的位宽。
本发明实施例还提供了一种哈希表管理方法。图4是根据本发明实施例的哈希表 管理方法的流程图二,如图4所示,包括如下的步骤S402至步骤S406。步骤S402,使用主哈希函数和子哈希函数对关键字进行计算,得到哈希表中的空 闲记录的地址。步骤S404,查找写有空闲记录的地址的空闲记录。步骤S406,获取空闲记录中的内容。优选地,使用主哈希函数和子哈希函数对关键字进行计算,得到哈希表中的空闲 记录的地址包括使用主哈希函数计算关键字对应的第一地址;根据第一地址,获取哈希 表中的哈希桶中的多条空闲记录;使用子哈希函数计算关键字对应的第二地址,其中第二 地址为多条空闲记录中的一条空闲记录的地址;确定第二地址为哈希表中的空闲记录的地 址。优选地,在使用子哈希函数计算关键字对应的第二地址之前,上述方法还包括在 多个子哈希函数中确定一个子哈希函数;在多条空闲记录中写入确定的子哈希函数在多个 子哈希函数中的序列号。下面将结合实例对本发明实施例的实现过程进行详细描述。图5是根据本发明实施例的哈希表建立过程的流程图,如图5所示,包括如下的步 骤S502至步骤S516。步骤S502,规划出哈希表存储空间。步骤S504,建立主哈希函数F_MAIN ;主哈希函数计算结果的位宽取决于哈希表的 深度以及哈希桶的深度。步骤S506,建立N个子哈希函数Fl,F2,F3,F4,... 。子哈希函数的个数一般不 超过哈希桶的深度。各个子哈希函数的计算结果的位宽取决于哈希表项中的F_VAL的位
觅ο步骤S508,判断是否有哈希表项需要添加,如果是,则进行步骤S510,否则重复进 行步骤S508。步骤S510,将欲存入哈希表的内容,取出关键字K,计算F_MAIN⑷。步骤S512,找出对&F_MAIN(K)下的哈希桶内的空闲记录;步骤S514,挑选一个子哈希函数Fm。步骤S516,将序列号m写入哈希桶内的空闲记录的F_SEL域,并将Fm⑷写入F_ VAL域,同时将相关信息写入F_ACTI0N,然后返回步骤S508。图6是根据本发明实施例的哈希表查找过程的流程图,如图6所示,包括如下的步 骤S602至步骤S620。步骤S602,对关键字K进行F_MAIN(K)计算。步骤S604,置变量η等于1。步骤S606,判断η是否大于N,如果是则进行步骤S620,否则进行步骤S608。步骤S608,读出F_MAIN(K)对应的哈希桶内的N个记录。步骤S610,根据各个哈希桶内的哈希表项的F_SEL,选择对应的子哈希函数Fm,对 关键字K机型Fm (K)。步骤S612,将Rn(K)和哈希记录的F_VALUE进行比较。
步骤S614,判断Fm(K)和哈希记录的F_VALUE是否相等,如果是则进行步骤S616, 否则进行步骤S618,并返回步骤S606。步骤S616,命中,查找成功,读出对应的F_ACTI0N。步骤S618,将 η 加 1。步骤S620,不命中,查找失败。需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的 计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不 同于此处的顺序执行所示出或描述的步骤。本发明实施例提供了 一种哈希表管理装置,该哈希表管理装置可以用于实现上述 哈希表管理方法。图7是根据本发明实施例的哈希表管理装置的结构框图一,如图7所示, 包括第一获取模块72,第一计算模块74和写入模块76。下面对其结构进行详细描述。第一获取模块72,用于获取待写入哈希表中的内容的关键字;第一计算模块74, 连接至第一获取模块72,用于使用主哈希函数和子哈希函数对第一获取模块72获取的关 键字进行计算,得到哈希表中的空闲记录的地址;写入模块76,连接至第一计算模块74,用 于将待写入哈希表中的内容和第一计算模块74计算得到的空闲记录的地址写入空闲记录 的地址对应的空闲记录。本发明实施例提供了 一种哈希表管理装置,该哈希表管理装置可以用于实现上述 哈希表管理方法。图8是根据本发明实施例的哈希表管理装置的结构框图二,如图8所示, 包括第二计算模块82、查找模块84和第二获取模块86。下面对其结构进行详细描述。第二计算模块82,使用主哈希函数和子哈希函数对关键字进行计算,得到哈希表 中的空闲记录的地址;查找模块84,连接至第二计算模块82,用于查找写有第二计算模块 82计算得到的空闲记录的地址的空闲记录;第二获取模块86,连接至查找模块84,用于获 取查找模块84查找的空闲记录中的内容。需要说明的是,装置实施例中描述的哈希表管理装置对应于上述的方法实施例, 其具体的实现过程在方法实施例中已经进行过详细说明,在此不再赘述。 综上所述,根据本发明的上述实施例,提供了 一种哈希表管理方法及装置。通过使 用主哈希函数和子哈希函数对关键字进行计算,从而得到哈希表中的待写入的地址,可以 充分利用该关键字和哈希地址之间的关联性,从而减少哈希表的存储宽度,进而减小硬件 实现空间,减小资源消耗。显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用 的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成 的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储 在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们 中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的 硬件和软件结合。以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技 术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修 改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种哈希表管理方法,其特征在于,包括 获取待写入哈希表中的内容的关键字;使用主哈希函数和子哈希函数对所述关键字进行计算,得到所述哈希表中的空闲记录 的地址;将所述待写入哈希表中的内容和所述空闲记录的地址写入所述空闲记录的地址对应 的空闲记录。
2.根据权利要求1所述的方法,其特征在于,使用主哈希函数和子哈希函数对所述关 键字进行计算,得到所述哈希表中的空闲记录的地址包括使用所述主哈希函数计算所述关键字对应的第一地址; 根据所述第一地址,获取所述哈希表中的哈希桶中的多条空闲记录; 使用所述子哈希函数计算所述关键字对应的第二地址,其中所述第二地址为所述多条 空闲记录中的一条空闲记录的地址;确定所述第二地址为所述哈希表中的空闲记录的地址。
3.根据权利要求2所述的方法,其特征在于,在使用所述子哈希函数计算所述关键字 对应的第二地址之前,所述方法还包括在多个子哈希函数中确定一个子哈希函数;在所述多条空闲记录中写入所述确定的子哈希函数在所述多个子哈希函数中的序列号。
4.根据权利要求2所述的方法,其特征在于,根据所述哈希表的深度和所述哈希桶的 深度确定所述主哈希函数计算结果的位宽。
5.根据权利要求1所述的方法,其特征在于,根据所述空闲记录的地址的位宽确定所 述子哈希函数计算结果的位宽。
6.一种哈希表管理方法,其特征在于,包括使用主哈希函数和子哈希函数对关键字进行计算,得到哈希表中的空闲记录的地址; 查找写有所述空闲记录的地址的空闲记录; 获取所述空闲记录中的内容。
7.根据权利要求6所述的方法,其特征在于,使用主哈希函数和子哈希函数对关键字 进行计算,得到哈希表中的空闲记录的地址包括使用所述主哈希函数计算所述关键字对应的第一地址; 根据所述第一地址,获取所述哈希表中的哈希桶中的多条空闲记录; 使用所述子哈希函数计算所述关键字对应的第二地址,其中所述第二地址为所述多条 空闲记录中的一条空闲记录的地址;确定所述第二地址为所述哈希表中的空闲记录的地址。
8.根据权利要求7所述的方法,其特征在于,在使用所述子哈希函数计算所述关键字 对应的第二地址之前,所述方法还包括在多个子哈希函数中确定一个子哈希函数;在所述多条空闲记录中写入所述确定的子哈希函数在所述多个子哈希函数中的序列号。
9.一种哈希表管理装置,其特征在于,包括第一获取模块,用于获取待写入哈希表中的内容的关键字;第一计算模块,用于使用主哈希函数和子哈希函数对所述关键字进行计算,得到所述 哈希表中的空闲记录的地址;写入模块,用于将所述待写入哈希表中的内容和所述空闲记录的地址写入所述空闲记 录的地址对应的空闲记录。
10. 一种哈希表管理装置,其特征在于,包括第二计算模块,使用主哈希函数和子哈希函数对关键字进行计算,得到哈希表中的空 闲记录的地址;查找模块,用于查找写有所述空闲记录的地址的空闲记录; 第二获取模块,用于获取所述空闲记录中的内容。
全文摘要
本发明公开了一种哈希表管理方法及装置,该方法包括获取待写入哈希表中的内容的关键字;使用主哈希函数和子哈希函数对关键字进行计算,得到哈希表中的空闲记录的地址;将待写入哈希表中的内容和空闲记录的地址写入空闲记录的地址对应的空闲记录。本发明可以减少哈希表的存储宽度,进而减小硬件实现空间,减小资源消耗。
文档编号G06F17/30GK102073733SQ20111002167
公开日2011年5月25日 申请日期2011年1月19日 优先权日2011年1月19日
发明者吴春华 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1