哈希表添加、查找和删除方法及装置.pdf

上传人:n****g 文档编号:1002413 上传时间:2018-03-24 格式:PDF 页数:16 大小:576.24KB
返回 下载 相关 举报
摘要
申请专利号:

CN201110212730.4

申请日:

2011.07.27

公开号:

CN102314485A

公开日:

2012.01.11

当前法律状态:

驳回

有效性:

无权

法律详情:

发明专利申请公布后的驳回IPC(主分类):G06F 17/30申请公布日:20120111|||实质审查的生效IPC(主分类):G06F 17/30申请日:20110727|||公开

IPC分类号:

G06F17/30

主分类号:

G06F17/30

申请人:

中国科学院计算机网络信息中心

发明人:

孙云刚; 孙才; 陈曦

地址:

100190 北京市海淀区中关村南四街四号

优先权:

专利代理机构:

北京同立钧成知识产权代理有限公司 11205

代理人:

丁琛;李勇

PDF下载: PDF下载
内容摘要

一种哈希表添加、查找和删除方法及装置。其中哈希表添加方法包括:提取待添加数据的关键字;对关键字进行哈希运算得到哈希地址及哈希指纹;根据哈希地址判断相应的目标存储位置是否被占用;当目标存储位置被占用时,在哈希表中查找未被占用空闲存储位置,并判断目标存储位置处的占用节点是否为一个双向链表的首节点;若是,则根据哈希指纹,在空闲存储位置添加目标节点,并将该目标节点链接到占用节点所在双向链表的链尾;若否,则将占用节点移动到空闲存储位置,并将该占用节点链接到该占用节点所在双向链表的链尾,根据哈希指纹,在目标存储位置添加目标节点,构成单节点的双向链表。本发明可以提高哈希表的利用效率及存储空间的利用率。

权利要求书

1: 一种哈希表添加方法, 其特征在于包括 : 提取待添加数据的关键字 ; 对所述关键字进行哈希运算得到哈希地址及哈希指纹 ; 根据所述哈希地址判断相应的目标存储位置是否被占用 ; 当所述目标存储位置被占用时, 在所述哈希表中查找未被占用空闲存储位置, 并判断 所述目标存储位置处的占用节点是否为一个双向链表的首节点 ; 若是, 则根据所述哈希指纹, 在所述空闲存储位置添加目标节点, 并将该目标节点链接 到所述占用节点所在双向链表的链尾 ; 若否, 则将所述占用节点移动到所述空闲存储位置, 并将该占用节点链接到该占用节 点所在双向链表的链尾, 根据所述哈希指纹, 在所述目标存储位置添加目标节点, 构成单节 点的双向链表。
2: 根据权利要求 1 所述的方法, 其特征在于还包括 : 当所述目标存储位置未被占用时, 根据所述哈希指纹, 在所述目标存储位置添加目标节点, 构成单节点的双向链表。
3: 一种哈希表查找方法, 其特征在于包括 : 提取待查找数据的关键字 ; 对所述关键字进行哈希运算得到哈希地址及哈希指纹 ; 根据所述哈希地址, 在采用权利要求 1 或 2 所述方法而形成的哈希表中, 读取相应目标 存储位置处的疑似节点的内容 ; 当该疑似节点中的哈希指纹与所述关键字的哈希指纹不匹配时, 判断所述疑似节点是 否为一个双向链表的首节点 ; 所述疑似节点为一个双向链表的首节点时, 对所述疑似节点所在的双向链表进行遍历 查找 ; 当该双向链表中的一个节点的哈希指纹与所述关键字的哈希指纹相匹配时, 则查找成 功, 结束查找。
4: 根据权利要求 3 所述的方法, 其特征在于所述读取相应目标存储位置处的疑似节点 的内容之后还包括 : 当该疑似节点中的哈希指纹与所述关键字的哈希指纹相匹配时, 则查 找成功, 结束查找。
5: 根据权利要求 3 所述的方法, 其特征在于还包括 : 所述疑似节点不是一个双向链表 的首节点时, 则查找失败, 结束查找。
6: 一种哈希表删除方法, 其特征在于包括 : 采用权利要求 3 ~ 5 中任一项所述方法在采用权利要求 1 或 2 所述方法而形成的哈希 表中查找到要删除的目标节点 ; 将所述目标节点从相应的存储位置删除 ; 当所述目标节点在双向链表中还链接有后续节点时, 将该后续节点在所述双向链表中 的位置前移。
7: 一种哈希表添加装置, 其特征在于包括 : 提取模块, 用于提取待添加数据的关键字 ; 运算模块, 用于对提取模块提取出的所述关键字进行哈希运算得到哈希地址及哈希指 纹; 2 第一判断模块, 用于根据运算模块得到的所述哈希地址判断相应的目标存储位置是否 被占用 ; 第二判断模块, 用于当第一判断模块判断出所述目标存储位置被占用时, 在所述哈希 表中查找未被占用空闲存储位置, 并判断所述目标存储位置处的占用节点是否为一个双向 链表的首节点 ; 第一添加执行模块, 用于当第二判断模块的判断结果为是时, 根据运算模块得到的所 述哈希指纹, 在所述空闲存储位置添加目标节点, 并将该目标节点链接到所述占用节点所 在双向链表的链尾 ; 当第二判断模块的判断结果为否时, 将所述占用节点移动到所述空闲 存储位置, 并将该占用节点链接到该占用节点所在双向链表的链尾, 根据运算模块得到的 所述哈希指纹, 在所述目标存储位置添加目标节点, 构成单节点的双向链表。
8: 根据权利要求 7 所述的装置, 其特征在于还包括 : 第二添加执行模块, 用于当第一判 断模块判断出所述目标存储位置未被占用时, 根据运算模块得到的所述哈希指纹, 在所述 目标存储位置添加目标节点, 构成单节点的双向链表。
9: 一种哈希表查找装置, 其特征在于包括 : 提取模块, 用于提取待查找数据的关键字 ; 运算模块, 用于对提取模块提取的所述关键字进行哈希运算得到哈希地址及哈希指 纹; 读取模块, 根据运算模块得到的所述哈希地址, 在采用权利要求 1 或 2 所述方法而形成 的哈希表中, 读取相应目标存储位置处的疑似节点的内容 ; 判断模块, 用于当读取模块读取的该疑似节点中的哈希指纹与所述关键字的哈希指纹 不匹配时, 判断所述疑似节点是否为一个双向链表的首节点 ; 查找模块, 用于当判断模块判断出所述疑似节点为一个双向链表的首节点时, 对所述 疑似节点所在的双向链表进行遍历查找, 当该双向链表中的一个节点的哈希指纹与所述关 键字的哈希指纹相匹配时, 则查找成功, 结束查找。
10: 一种哈希表删除装置, 其特征在于包括 : 查找模块, 用于采用权利要求 3 ~ 5 中任一项所述方法在采用权利要求 1 或 2 所述方 法而形成的哈希表中查找到要删除的目标节点 ; 删除执行模块, 用于将查找模块查找到的所述目标节点从相应的存储位置删除 ; 移位模块, 用于当查找模块查找到的所述目标节点在双向链表中还链接有后续节点 时, 将该后续节点在所述双向链表中的位置前移。

说明书


哈希表添加、 查找和删除方法及装置

    【技术领域】
     本发明涉及一种哈希表添加、 查找和删除方法及装置, 属于数据处理技术领域。背景技术 哈希表 (Hash Table) 也称为散列表, 是一种根据数据关键码值 (Key Value) 进行 直接进行访问的数据结构。传统哈希表通常包含多个具有一定桶深的哈希桶, 每个哈希桶 都包含了哈希后得到的地址指向该桶的元素。 为了使哈希表在冲突存在的情况下达到期望 的利用率, 通常采用增加哈希桶数量的方式降低冲突率, 并采用增加每个哈希桶最大桶深 的方式来提高对冲突的容忍度。
     对于软件结构下的哈希表, 只要处理器有足够的处理能力, 上述方式均易于实现 ; 但对于传统硬件结构下的哈希表, 不论增加哈希桶的数量, 还是增加每个哈希桶的最大深 度, 都意味着要占用更多的存储资源, 而存储资源总是有限的, 因此必须在哈希桶的数量及 每个哈希桶的最大深度之间做出一种平衡, 这就使哈希表的利用效率难以有大的提高。
     发明内容 本发明提供一种哈希表添加、 查找和删除方法, 用以提高哈希表的利用效率及存 储空间的利用率。
     本发明一方面提供一种哈希表添加方法, 其中包括 :
     提取待添加数据的关键字 ;
     对所述关键字进行哈希运算得到哈希地址及哈希指纹 ;
     根据所述哈希地址判断相应的目标存储位置是否被占用 ;
     当所述目标存储位置被占用时, 在所述哈希表中查找未被占用空闲存储位置, 并 判断所述目标存储位置处的占用节点是否为一个双向链表的首节点 ;
     若是, 则根据所述哈希指纹, 在所述空闲存储位置添加目标节点, 并将该目标节点 链接到所述占用节点所在双向链表的链尾 ;
     若否, 则将所述占用节点移动到所述空闲存储位置, 并将该占用节点链接到该占 用节点所在双向链表的链尾, 根据所述哈希指纹, 在所述目标存储位置添加目标节点, 构成 单节点的双向链表。
     本发明另一方面提供一种哈希表查找方法, 其中包括 :
     提取待查找数据的关键字 ;
     对所述关键字进行哈希运算得到哈希地址及哈希指纹 ;
     根据所述哈希地址, 在采用如上所述的哈希表添加方法而形成的哈希表中, 读取 相应目标存储位置处的疑似节点的内容 ;
     当该疑似节点中的哈希指纹与所述关键字的哈希指纹不匹配时, 判断所述疑似节 点是否为一个双向链表的首节点 ;
     所述疑似节点为一个双向链表的首节点时, 对所述疑似节点所在的双向链表进行
     遍历查找 ;
     当该双向链表中的一个节点的哈希指纹与所述关键字的哈希指纹相匹配时, 则查 找成功, 结束查找。
     本发明再一方面提供一种哈希表删除方法, 其中包括 :
     采用如上所述的哈希表查找方法在采用如上所述的哈希表添加方法而形成的哈 希表中查找到要删除的目标节点 ;
     将所述目标节点从相应的存储位置删除 ;
     当所述目标节点在双向链表中还链接有后续节点时, 将该后续节点在所述双向链 表中的位置前移。
     本发明又一方面提供一种哈希表添加装置, 其中包括 :
     提取模块, 用于提取待添加数据的关键字 ;
     运算模块, 用于对提取模块提取出的所述关键字进行哈希运算得到哈希地址及哈 希指纹 ;
     第一判断模块, 用于根据运算模块得到的所述哈希地址判断相应的目标存储位置 是否被占用 ;
     第二判断模块, 用于当第一判断模块判断出所述目标存储位置被占用时, 在所述 哈希表中查找未被占用空闲存储位置, 并判断所述目标存储位置处的占用节点是否为一个 双向链表的首节点 ;
     第一添加执行模块, 用于当第二判断模块的判断结果为是时, 根据运算模块得到 的所述哈希指纹, 在所述空闲存储位置添加目标节点, 并将该目标节点链接到所述占用节 点所在双向链表的链尾 ; 当第二判断模块的判断结果为否时, 将所述占用节点移动到所述 空闲存储位置, 并将该占用节点链接到该占用节点所在双向链表的链尾, 根据运算模块得 到的所述哈希指纹, 在所述目标存储位置添加目标节点, 构成单节点的双向链表。
     本发明又一方面提供一种哈希表查找装置, 其中包括 :
     提取模块, 用于提取待查找数据的关键字 ;
     运算模块, 用于对提取模块提取的所述关键字进行哈希运算得到哈希地址及哈希 指纹 ;
     读取模块, 根据运算模块得到的所述哈希地址, 在采用如上所述的哈希表添加方 法而形成的哈希表中, 读取相应目标存储位置处的疑似节点的内容 ;
     判断模块, 用于当读取模块读取的该疑似节点中的哈希指纹与所述关键字的哈希 指纹不匹配时, 判断所述疑似节点是否为一个双向链表的首节点 ;
     查找模块, 用于当判断模块判断出所述疑似节点为一个双向链表的首节点时, 对 所述疑似节点所在的双向链表进行遍历查找, 当该双向链表中的一个节点的哈希指纹与所 述关键字的哈希指纹相匹配时, 则查找成功, 结束查找。
     本发明又一方面提供一种哈希表删除装置, 其中包括 :
     查找模块, 用于采用如上所述的哈希表查找方法在采用如上所述的哈希表添加方 法而形成的哈希表中查找到要删除的目标节点 ;
     删除执行模块, 用于将查找模块查找到的所述目标节点从相应的存储位置删除 ;
     移位模块, 用于当查找模块查找到的所述目标节点在双向链表中还链接有后续节点时, 将该后续节点在所述双向链表中的位置前移。
     本发明可以提高哈希表的利用效率及存储空间的利用率。 附图说明 为了更清楚地说明本发明实施例或现有技术中的技术方案, 下面将对实施例或现 有技术描述中所需要使用的附图作一简单地介绍, 显而易见地, 下面描述中的附图是本发 明的一些实施例, 对于本领域普通技术人员来讲, 在不付出创造性劳动的前提下, 还可以根 据这些附图获得其他的附图。
     图 1 为本发明各实施例中所涉及的哈希表的数据结构示意图 ;
     图 2 为图 1 所示哈希表中每个节点的数据结构示意图 ;
     图 3A 和图 3B 为图 2 所示每个节点中各字段大小的说明图 ;
     图 4 为本发明所述哈希表添加方法实施例的流程图 ;
     图 5A ~ 5C 为图 4 所示方法中各步骤的举例示意图 ;
     图 6 为本发明所述哈希表查找方法实施例的流程图 ;
     图 7 为本发明所述哈希表删除方法实施例的流程图 ;
     图 8 为本发明所述哈希表添加装置实施例的结构示意图 ; 图 9 为本发明所述哈希表查找装置实施例的结构示意图 ; 图 10 为本发明所述哈希表删除装置实施例的结构示意图。具体实施方式
     为使本发明实施例的目的、 技术方案和优点更加清楚, 下面将结合本发明实施例 中的附图, 对本发明实施例中的技术方案进行清楚、 完整地描述, 显然, 所描述的实施例是 本发明一部分实施例, 而不是全部的实施例。 基于本发明中的实施例, 本领域普通技术人员 在没有作出创造性劳动前提下所获得的所有其他实施例, 都属于本发明保护的范围。
     首先介绍本发明以下各实施例中所涉及的哈希表的数据结构。
     如图 1 所示, 该哈希表是硬件结构下的哈希表, 图中的方框中的数字表示哈希地 址, 圆圈表示链表中的每个节点, 直线箭头表示节点与哈希地址之间的对应关系, 弧线箭头 表示相邻节点之间的链接关系。
     如图 2 所示, 每个节点由四个字段组成, 每个节点的内容可以表示为 {OC, PRE_ OFST, POS_OFST, FM}, 其中 :
     标志字段 ( 图中表示为 : OC) : 标志当前存储位置是否被占用, “1” 表示占用, “0” 表示未占用 ;
     指纹字段 ( 图中表示为 : FM) : 存放由哈希算法计算出的当前数据的关键字对应的 待检测哈希指纹 ;
     前向指针字段 ( 图中表示为 : PRE_OFST) : 标志在具有相同哈希地址的相邻两个节 点中, 记录在后一个节点中的、 与前一个节点的存储地址距离 ;
     后向指针字段 ( 图中表示为 : POS_OFST) : 标志在具有相同哈希地址的相邻两个节 点中, 记录在前一个节点中的、 与后一个节点的存储地址距离。
     例如, 图 1 中, 三个相邻的节点 T1、 M1 和 H1 通过各自的前向指针字段及后向指针字段构成双向链表。
     如图 3A 及图 3B 所示, 每个节点均占用硬件存储器中特定长度的存储空间。在图 3A 中, 每个节点占用 32 个比特位, 其中, 每个指针占用 4 个比特位, 因此属于同一个双向链 表的相邻节点允许最大跨越 15 个节点 ; 在图 3B 中, 每个节点占用 64 个比特位, 其中, 每个 指针占用 11 个比特位, 因此属于同一个双向链表的相邻节点允许最大跨越 2047 个节点。
     图 4 为本发明所述哈希表添加方法实施例的流程图, 如图所示, 包括如下步骤 :
     步骤 110, 提取待添加数据的关键字。
     步骤 120, 对所述关键字进行哈希运算得到哈希地址及哈希指纹。
     具体的哈希运算过程可参考现有技术, 其中, 得到哈希地址的哈希运算与得到哈 希指纹的哈希运算有可能是不同的运算过程。
     步骤 130, 根据所述哈希地址判断相应的目标存储位置是否被占用, 当未被占用 时, 执行步骤 140, 否则执行步骤 150。
     具体地, 如前所述, 可以根据所述目标存储位置的目标节点的标志字段的值确定 其存储位置是否被占用。
     步骤 140, 根据所述哈希指纹, 在所述目标存储位置添加目标节点, 构成单节点的 双向链表。 具体地, 在所述目标节点的指纹字段保存所述哈希指纹, 将标示字段的值设置为 “1” , 将前向指针及后向指针的值均设置为 “0” 。例如, 在进行添加操作之前的哈希表如图 1 所示, 假设一个待添加数据 X 的关键字通过哈希运算后得到的哈希地址为 9, 哈希指纹为 FMX, 如图 5A 所示, 经过步骤 140 的添加操作后, 在地址为 9 的目标存储位置创建了一个新 的双向链表, 该双向链表只具有一个节点, 即所述目标节点, 其内容为 {1, 0, 0, FMX}。
     步骤 150, 在所述哈希表中查找未被占用空闲存储位置, 并判断所述目标存储位置 处的占用节点是否为一个双向链表的首节点, 是则执行步骤 151, 否则执行步骤 152。
     其中, 占用节点是指占用所述目标存储位置的节点, 具体地, 当该占用节点的前向 指针字段的值为 0 时, 则表明该占用节点之前并不与其他节点相链接, 因此该占用节点为 双向链表的首节点, 否则该占用节点不是双向链表的首节点。 具体地, 所述空闲存储位置可 以是位于所述目标存储位置之后, 且距离最近的空闲存储位置。
     此处需要说明的是, 如果所述双向链表为单节点链表, 则可以认为该单节点既为 首节点, 也为尾节点。
     步骤 151, 根据所述哈希指纹, 在所述空闲存储位置添加目标节点, 并将该目标节 点链接到所述占用节点所在双向链表的链尾。
     例如, 在进行添加操作之前的哈希表如图 1 所示, 假设一个待添加数据 X 的关键字 通过哈希运算后得到的哈希地址为 5, 哈希指纹为 FMX, 如图 5B 所示, 在哈希地址为 5 的目 标存储位置处的占用节点 H1 为一个双向链表的首节点, 因此, 经过步骤 151 的添加操作后, 在地址为 9 的空闲存储位置处添加了目标节点 X, 并将该目标节点 X 链接在原先的尾节点 T1 之后成为新的尾节点。
     步骤 152, 将所述占用节点移动到所述空闲存储位置, 并将该占用节点链接到该占 用节点所在双向链表的链尾, 根据所述哈希指纹, 在所述目标存储位置添加目标节点, 构成 单节点的双向链表。
     例如, 在进行添加操作之前的哈希表如图 1 所示, 假设一个待添加数据 X 的关键字 通过哈希运算后得到的哈希地址为 6, 哈希指纹为 FMX, 如图 1 所示, 在哈希地址为 6 的目标 存储位置处的占用节点 M1 不是一个双向链表的首节点, 因此, 经过步骤 152 的添加操作后, 如图 5C 所示, 该占用节点 T1 被移动到地址为 9 的空闲存储位置, 并将该占用节点 M1 链接 到该占用节点 M1 所在双向链表的链尾成为新的尾节点, 这样做的目的是为了空出地址为 6 的目标存储位置 ; 然后, 在地址为 6 的目标存储位置添加了目标节点 X, 构成单节点的双向 链表。
     图 6 为本发明所述哈希表查找方法实施例的流程图, 如图所示, 包括如下步骤 :
     步骤 210, 提取待查找数据的关键字。
     步骤 220, 对所述关键字进行哈希运算得到哈希地址及哈希指纹。
     具体的哈希运算过程可参考现有技术, 其中, 得到哈希地址的哈希运算与得到哈 希指纹的哈希运算有可能是不同的运算过程。
     步骤 230, 根据所述哈希地址, 在采用图 4 所示方法而形成的哈希表中, 读取相应 目标存储位置处的疑似节点的内容, 当该疑似节点中的哈希指纹与所述关键字的哈希指纹 相匹配时, 则查找成功, 结束查找 ; 否则继续执行步骤 240。 其中, 所述疑似节点是指有可能是要查找的目标节点的节点, 如果指纹匹配成功, 则可以确定该疑似节点就是目标节点, 否则还要继续寻找。
     步骤 240, 判断所述疑似节点是否为一个双向链表的首节点, 是则继续执行步骤 250, 否则查找失败, 结束查找。
     从上述添加过程可以看出, 在图 5B 中, 虽然新添加的节点 X 占用的是地址为 9 的 存储位置, 但该节点 X 实际上对应的存储位置的地址为 5, 因此, 当所述疑似节点不是一个 双向链表的首节点时, 表明该疑似节点仅仅是恰巧占用了所述目标存储位置的一个不相关 的节点, 而非要找的目标节点。而该哈希表中已不可能存在要找的目标节点, 因此查找失 败。
     此处需要说明的是, 如果所述双向链表为单节点链表, 则可以认为该疑似节点既 为首节点, 也为尾节点。
     步骤 250, 对所述疑似节点所在的双向链表进行遍历查找, 当该双向链表中的一个 节点的哈希指纹与所述关键字的哈希指纹相匹配时, 则查找成功 ; 否则查找失败。
     其中, 所述遍历查找是指从作为链首的所述疑似节点开始, 沿着所述双向链表逐 个节点地向后查找。例如, 如图 5B 所示, 假设根据所述哈希地址为 5, 则在该目标存储位置 首先找到的疑似节点为节点 H1, 然后沿着节点 H1 向后找到节点 M1, 指纹匹配结果为不匹 配, 因此继续向后找到节点 T1, 指纹匹配结果仍然为不匹配 ; 因此继续向后找到节点 X, 指 纹匹配结果为匹配, 此时查找成功。
     图 7 为本发明所述哈希表删除方法实施例的流程图, 如图所示, 包括如下步骤 :
     步骤 310, 采用图 6 所示方法在采用图 4 所示方法而形成的哈希表中查找到要删除 的目标节点。
     步骤 320, 将所述目标节点从相应的存储位置删除。
     步骤 330, 当所述目标节点在双向链表中还链接有后续节点时, 将该后续节点在所 述双向链表中的位置前移。
     其中, 所述后续节点是指链接在目标节点之后的节点, 进行前移的目的是为了在 将目标节点删除后, 保持双向链表中余下节点的连续性。
     通过采用本发明上述各实施例所述的添加、 查找和删除的方法, 可以形成具有双 向链表的哈希表, 适合硬件实现, 并在单个查找引擎顺序查找及不增加存储器使用量的前 提下, 有效解决哈希冲突, 提高哈希表的利用效率, 并最大限度的利用存储空间, 实现大容 量的数据存储。
     图 8 为本发明所述哈希表添加装置实施例的结构示意图, 能够实现上述哈希表添 加方法, 如图所示, 该哈希表添加装置 10 包括 : 提取模块 11、 运算模块 12、 第一判断模块 13、 第二判断模块 14、 第一添加执行模块 15 及第二添加执行模块 16, 其工作原理如下 :
     首先由提取模块 11 提取待添加数据的关键字 ; 然后由运算模块 12 对提取模块 11 提取出的所述关键字进行哈希运算得到哈希地址及哈希指纹。
     此后, 第一判断模块 13 根据运算模块 12 得到的所述哈希地址判断相应的目标存 储位置是否被占用, 当第一判断模块 13 判断出所述目标存储位置未被占用时, 由第二添加 执行模块 16 根据运算模块 12 得到的所述哈希指纹, 在所述目标存储位置添加目标节点, 构 成单节点的双向链表, 具体的举例可参见图 5A 及其相关说明。
     当第一判断模块 13 判断出所述目标存储位置被占用时, 由第二判断模块 14 在所 述哈希表中查找未被占用空闲存储位置, 并判断所述目标存储位置处的占用节点是否为一 个双向链表的首节点 ; 当第二判断模块 14 的判断结果为是时, 由第一添加执行模块 15 根据 运算模块 12 得到的所述哈希指纹, 在所述空闲存储位置添加目标节点, 并将该目标节点链 接到所述占用节点所在双向链表的链尾, 。
     当第二判断模块 14 的判断结果为否时, 由第一添加执行模块 15 将所述占用节点 移动到所述空闲存储位置, 并将该占用节点链接到该占用节点所在双向链表的链尾, 根据 运算模块 12 得到的所述哈希指纹, 在所述目标存储位置添加目标节点, 构成单节点的双向 链表, 具体的举例可参见图 5C 及其相关说明。
     图 9 为本发明所述哈希表查找装置实施例的结构示意图, 能够实现上述哈希表查 找方法, 如图所示, 该哈希表查找装置 20 包括 : 提取模块 21、 运算模块 22、 读取模块 23、 判 断模块 24 及查找模块 25, 其工作原理如下 :
     首先由提取模块 21 提取待查找数据的关键字 ; 然后由运算模块 22 对提取模块 21 提取的所述关键字进行哈希运算得到哈希地址及哈希指纹 ; 进而由读取模块 23 运算模块 22 得到的所述哈希地址, 在采用上述哈希表添加方法而形成的哈希表中, 读取相应目标存 储位置处的疑似节点的内容。
     此后, 当读取模块 23 读取的该疑似节点中的哈希指纹与所述关键字的哈希指纹 相匹配时, 则查找成功, 结束查找 ; 而当当读取模块 23 读取的该疑似节点中的哈希指纹与 所述关键字的哈希指纹不匹配时, 继续由判断模块 24 判断所述疑似节点是否为一个双向 链表的首节点。
     当判断模块 24 判断出所述疑似节点为一个双向链表的首节点时, 由查找模块 25 对所述疑似节点所在的双向链表进行遍历查找, 当该双向链表中的一个节点的哈希指纹与 所述关键字的哈希指纹相匹配时, 则查找成功, 结束查找 ; 否则查找失败, 结束查找 ; 否则, 如果判断模块 24 判断出所述疑似节点为不是一个双向链表的首节点时, 则查找失败, 结束查找。 图 10 为本发明所述哈希表删除装置实施例的结构示意图, 能够实现上述哈希表 删除方法, 如图所示, 该哈希表删除装置 30 包括 : 查找模块 31、 删除执行模块 32 及移位模 块 33, 其工作原理如下 :
     首先由查找模块 31 采用上述哈希表查找方法在采用上述哈希表添加方面而形成 的哈希表中查找到要删除的目标节点 ; 然后由删除执行模块 32 将查找模块 31 查找到的所 述目标节点从相应的存储位置删除 ; 另外, 当查找模块 31 查找到的所述目标节点在双向链 表中还链接有后续节点时, 进一步由移位模块 33 将该后续节点在所述双向链表中的位置 前移。
     通过采用本发明上述各实施例所述的添加、 查找和删除的装置, 可以形成具有双 向链表的哈希表, 适合硬件实现, 并在单个查找引擎顺序查找及不增加存储器使用量的前 提下, 有效解决哈希冲突, 提高哈希表的利用效率, 并最大限度的利用存储空间, 实现大容 量的数据存储。
     本领域普通技术人员可以理解 : 实现上述方法实施例的全部或部分步骤可以通过 程序指令相关的硬件来完成, 前述的程序可以存储于一计算机可读取存储介质中, 该程序 在执行时, 执行包括上述方法实施例的步骤 ; 而前述的存储介质包括 : ROM、 RAM、 磁碟或者 光盘等各种可以存储程序代码的介质。
     最后应说明的是 : 以上实施例仅用以说明本发明的技术方案, 而非对其限制 ; 尽 管参照前述实施例对本发明进行了详细的说明, 本领域的普通技术人员应当理解 : 其依然 可以对前述各实施例所记载的技术方案进行修改, 或者对其中部分技术特征进行等同替 换; 而这些修改或者替换, 并不使相应技术方案的本质脱离本发明各实施例技术方案的精 神和范围。
    

哈希表添加、查找和删除方法及装置.pdf_第1页
第1页 / 共16页
哈希表添加、查找和删除方法及装置.pdf_第2页
第2页 / 共16页
哈希表添加、查找和删除方法及装置.pdf_第3页
第3页 / 共16页
点击查看更多>>
资源描述

《哈希表添加、查找和删除方法及装置.pdf》由会员分享,可在线阅读,更多相关《哈希表添加、查找和删除方法及装置.pdf(16页珍藏版)》请在专利查询网上搜索。

1、10申请公布号CN102314485A43申请公布日20120111CN102314485ACN102314485A21申请号201110212730422申请日20110727G06F17/3020060171申请人中国科学院计算机网络信息中心地址100190北京市海淀区中关村南四街四号72发明人孙云刚孙才陈曦74专利代理机构北京同立钧成知识产权代理有限公司11205代理人丁琛李勇54发明名称哈希表添加、查找和删除方法及装置57摘要一种哈希表添加、查找和删除方法及装置。其中哈希表添加方法包括提取待添加数据的关键字;对关键字进行哈希运算得到哈希地址及哈希指纹;根据哈希地址判断相应的目标存储位置。

2、是否被占用;当目标存储位置被占用时,在哈希表中查找未被占用空闲存储位置,并判断目标存储位置处的占用节点是否为一个双向链表的首节点;若是,则根据哈希指纹,在空闲存储位置添加目标节点,并将该目标节点链接到占用节点所在双向链表的链尾;若否,则将占用节点移动到空闲存储位置,并将该占用节点链接到该占用节点所在双向链表的链尾,根据哈希指纹,在目标存储位置添加目标节点,构成单节点的双向链表。本发明可以提高哈希表的利用效率及存储空间的利用率。51INTCL19中华人民共和国国家知识产权局12发明专利申请权利要求书2页说明书7页附图6页CN102314489A1/2页21一种哈希表添加方法,其特征在于包括提取待。

3、添加数据的关键字;对所述关键字进行哈希运算得到哈希地址及哈希指纹;根据所述哈希地址判断相应的目标存储位置是否被占用;当所述目标存储位置被占用时,在所述哈希表中查找未被占用空闲存储位置,并判断所述目标存储位置处的占用节点是否为一个双向链表的首节点;若是,则根据所述哈希指纹,在所述空闲存储位置添加目标节点,并将该目标节点链接到所述占用节点所在双向链表的链尾;若否,则将所述占用节点移动到所述空闲存储位置,并将该占用节点链接到该占用节点所在双向链表的链尾,根据所述哈希指纹,在所述目标存储位置添加目标节点,构成单节点的双向链表。2根据权利要求1所述的方法,其特征在于还包括当所述目标存储位置未被占用时,根。

4、据所述哈希指纹,在所述目标存储位置添加目标节点,构成单节点的双向链表。3一种哈希表查找方法,其特征在于包括提取待查找数据的关键字;对所述关键字进行哈希运算得到哈希地址及哈希指纹;根据所述哈希地址,在采用权利要求1或2所述方法而形成的哈希表中,读取相应目标存储位置处的疑似节点的内容;当该疑似节点中的哈希指纹与所述关键字的哈希指纹不匹配时,判断所述疑似节点是否为一个双向链表的首节点;所述疑似节点为一个双向链表的首节点时,对所述疑似节点所在的双向链表进行遍历查找;当该双向链表中的一个节点的哈希指纹与所述关键字的哈希指纹相匹配时,则查找成功,结束查找。4根据权利要求3所述的方法,其特征在于所述读取相应。

5、目标存储位置处的疑似节点的内容之后还包括当该疑似节点中的哈希指纹与所述关键字的哈希指纹相匹配时,则查找成功,结束查找。5根据权利要求3所述的方法,其特征在于还包括所述疑似节点不是一个双向链表的首节点时,则查找失败,结束查找。6一种哈希表删除方法,其特征在于包括采用权利要求35中任一项所述方法在采用权利要求1或2所述方法而形成的哈希表中查找到要删除的目标节点;将所述目标节点从相应的存储位置删除;当所述目标节点在双向链表中还链接有后续节点时,将该后续节点在所述双向链表中的位置前移。7一种哈希表添加装置,其特征在于包括提取模块,用于提取待添加数据的关键字;运算模块,用于对提取模块提取出的所述关键字进。

6、行哈希运算得到哈希地址及哈希指纹;权利要求书CN102314485ACN102314489A2/2页3第一判断模块,用于根据运算模块得到的所述哈希地址判断相应的目标存储位置是否被占用;第二判断模块,用于当第一判断模块判断出所述目标存储位置被占用时,在所述哈希表中查找未被占用空闲存储位置,并判断所述目标存储位置处的占用节点是否为一个双向链表的首节点;第一添加执行模块,用于当第二判断模块的判断结果为是时,根据运算模块得到的所述哈希指纹,在所述空闲存储位置添加目标节点,并将该目标节点链接到所述占用节点所在双向链表的链尾;当第二判断模块的判断结果为否时,将所述占用节点移动到所述空闲存储位置,并将该占用。

7、节点链接到该占用节点所在双向链表的链尾,根据运算模块得到的所述哈希指纹,在所述目标存储位置添加目标节点,构成单节点的双向链表。8根据权利要求7所述的装置,其特征在于还包括第二添加执行模块,用于当第一判断模块判断出所述目标存储位置未被占用时,根据运算模块得到的所述哈希指纹,在所述目标存储位置添加目标节点,构成单节点的双向链表。9一种哈希表查找装置,其特征在于包括提取模块,用于提取待查找数据的关键字;运算模块,用于对提取模块提取的所述关键字进行哈希运算得到哈希地址及哈希指纹;读取模块,根据运算模块得到的所述哈希地址,在采用权利要求1或2所述方法而形成的哈希表中,读取相应目标存储位置处的疑似节点的内。

8、容;判断模块,用于当读取模块读取的该疑似节点中的哈希指纹与所述关键字的哈希指纹不匹配时,判断所述疑似节点是否为一个双向链表的首节点;查找模块,用于当判断模块判断出所述疑似节点为一个双向链表的首节点时,对所述疑似节点所在的双向链表进行遍历查找,当该双向链表中的一个节点的哈希指纹与所述关键字的哈希指纹相匹配时,则查找成功,结束查找。10一种哈希表删除装置,其特征在于包括查找模块,用于采用权利要求35中任一项所述方法在采用权利要求1或2所述方法而形成的哈希表中查找到要删除的目标节点;删除执行模块,用于将查找模块查找到的所述目标节点从相应的存储位置删除;移位模块,用于当查找模块查找到的所述目标节点在双。

9、向链表中还链接有后续节点时,将该后续节点在所述双向链表中的位置前移。权利要求书CN102314485ACN102314489A1/7页4哈希表添加、查找和删除方法及装置技术领域0001本发明涉及一种哈希表添加、查找和删除方法及装置,属于数据处理技术领域。背景技术0002哈希表HASHTABLE也称为散列表,是一种根据数据关键码值KEYVALUE进行直接进行访问的数据结构。传统哈希表通常包含多个具有一定桶深的哈希桶,每个哈希桶都包含了哈希后得到的地址指向该桶的元素。为了使哈希表在冲突存在的情况下达到期望的利用率,通常采用增加哈希桶数量的方式降低冲突率,并采用增加每个哈希桶最大桶深的方式来提高对冲。

10、突的容忍度。0003对于软件结构下的哈希表,只要处理器有足够的处理能力,上述方式均易于实现;但对于传统硬件结构下的哈希表,不论增加哈希桶的数量,还是增加每个哈希桶的最大深度,都意味着要占用更多的存储资源,而存储资源总是有限的,因此必须在哈希桶的数量及每个哈希桶的最大深度之间做出一种平衡,这就使哈希表的利用效率难以有大的提高。发明内容0004本发明提供一种哈希表添加、查找和删除方法,用以提高哈希表的利用效率及存储空间的利用率。0005本发明一方面提供一种哈希表添加方法,其中包括0006提取待添加数据的关键字;0007对所述关键字进行哈希运算得到哈希地址及哈希指纹;0008根据所述哈希地址判断相应。

11、的目标存储位置是否被占用;0009当所述目标存储位置被占用时,在所述哈希表中查找未被占用空闲存储位置,并判断所述目标存储位置处的占用节点是否为一个双向链表的首节点;0010若是,则根据所述哈希指纹,在所述空闲存储位置添加目标节点,并将该目标节点链接到所述占用节点所在双向链表的链尾;0011若否,则将所述占用节点移动到所述空闲存储位置,并将该占用节点链接到该占用节点所在双向链表的链尾,根据所述哈希指纹,在所述目标存储位置添加目标节点,构成单节点的双向链表。0012本发明另一方面提供一种哈希表查找方法,其中包括0013提取待查找数据的关键字;0014对所述关键字进行哈希运算得到哈希地址及哈希指纹;。

12、0015根据所述哈希地址,在采用如上所述的哈希表添加方法而形成的哈希表中,读取相应目标存储位置处的疑似节点的内容;0016当该疑似节点中的哈希指纹与所述关键字的哈希指纹不匹配时,判断所述疑似节点是否为一个双向链表的首节点;0017所述疑似节点为一个双向链表的首节点时,对所述疑似节点所在的双向链表进行说明书CN102314485ACN102314489A2/7页5遍历查找;0018当该双向链表中的一个节点的哈希指纹与所述关键字的哈希指纹相匹配时,则查找成功,结束查找。0019本发明再一方面提供一种哈希表删除方法,其中包括0020采用如上所述的哈希表查找方法在采用如上所述的哈希表添加方法而形成的哈。

13、希表中查找到要删除的目标节点;0021将所述目标节点从相应的存储位置删除;0022当所述目标节点在双向链表中还链接有后续节点时,将该后续节点在所述双向链表中的位置前移。0023本发明又一方面提供一种哈希表添加装置,其中包括0024提取模块,用于提取待添加数据的关键字;0025运算模块,用于对提取模块提取出的所述关键字进行哈希运算得到哈希地址及哈希指纹;0026第一判断模块,用于根据运算模块得到的所述哈希地址判断相应的目标存储位置是否被占用;0027第二判断模块,用于当第一判断模块判断出所述目标存储位置被占用时,在所述哈希表中查找未被占用空闲存储位置,并判断所述目标存储位置处的占用节点是否为一个。

14、双向链表的首节点;0028第一添加执行模块,用于当第二判断模块的判断结果为是时,根据运算模块得到的所述哈希指纹,在所述空闲存储位置添加目标节点,并将该目标节点链接到所述占用节点所在双向链表的链尾;当第二判断模块的判断结果为否时,将所述占用节点移动到所述空闲存储位置,并将该占用节点链接到该占用节点所在双向链表的链尾,根据运算模块得到的所述哈希指纹,在所述目标存储位置添加目标节点,构成单节点的双向链表。0029本发明又一方面提供一种哈希表查找装置,其中包括0030提取模块,用于提取待查找数据的关键字;0031运算模块,用于对提取模块提取的所述关键字进行哈希运算得到哈希地址及哈希指纹;0032读取模。

15、块,根据运算模块得到的所述哈希地址,在采用如上所述的哈希表添加方法而形成的哈希表中,读取相应目标存储位置处的疑似节点的内容;0033判断模块,用于当读取模块读取的该疑似节点中的哈希指纹与所述关键字的哈希指纹不匹配时,判断所述疑似节点是否为一个双向链表的首节点;0034查找模块,用于当判断模块判断出所述疑似节点为一个双向链表的首节点时,对所述疑似节点所在的双向链表进行遍历查找,当该双向链表中的一个节点的哈希指纹与所述关键字的哈希指纹相匹配时,则查找成功,结束查找。0035本发明又一方面提供一种哈希表删除装置,其中包括0036查找模块,用于采用如上所述的哈希表查找方法在采用如上所述的哈希表添加方法。

16、而形成的哈希表中查找到要删除的目标节点;0037删除执行模块,用于将查找模块查找到的所述目标节点从相应的存储位置删除;0038移位模块,用于当查找模块查找到的所述目标节点在双向链表中还链接有后续节说明书CN102314485ACN102314489A3/7页6点时,将该后续节点在所述双向链表中的位置前移。0039本发明可以提高哈希表的利用效率及存储空间的利用率。附图说明0040为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,。

17、还可以根据这些附图获得其他的附图。0041图1为本发明各实施例中所涉及的哈希表的数据结构示意图;0042图2为图1所示哈希表中每个节点的数据结构示意图;0043图3A和图3B为图2所示每个节点中各字段大小的说明图;0044图4为本发明所述哈希表添加方法实施例的流程图;0045图5A5C为图4所示方法中各步骤的举例示意图;0046图6为本发明所述哈希表查找方法实施例的流程图;0047图7为本发明所述哈希表删除方法实施例的流程图;0048图8为本发明所述哈希表添加装置实施例的结构示意图;0049图9为本发明所述哈希表查找装置实施例的结构示意图;0050图10为本发明所述哈希表删除装置实施例的结构示。

18、意图。具体实施方式0051为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。0052首先介绍本发明以下各实施例中所涉及的哈希表的数据结构。0053如图1所示,该哈希表是硬件结构下的哈希表,图中的方框中的数字表示哈希地址,圆圈表示链表中的每个节点,直线箭头表示节点与哈希地址之间的对应关系,弧线箭头表示相邻节点之间的链接关系。0054如图2所示,每。

19、个节点由四个字段组成,每个节点的内容可以表示为OC,PRE_OFST,POS_OFST,FM,其中0055标志字段图中表示为OC标志当前存储位置是否被占用,“1”表示占用,“0”表示未占用;0056指纹字段图中表示为FM存放由哈希算法计算出的当前数据的关键字对应的待检测哈希指纹;0057前向指针字段图中表示为PRE_OFST标志在具有相同哈希地址的相邻两个节点中,记录在后一个节点中的、与前一个节点的存储地址距离;0058后向指针字段图中表示为POS_OFST标志在具有相同哈希地址的相邻两个节点中,记录在前一个节点中的、与后一个节点的存储地址距离。0059例如,图1中,三个相邻的节点T1、M1和。

20、H1通过各自的前向指针字段及后向指针说明书CN102314485ACN102314489A4/7页7字段构成双向链表。0060如图3A及图3B所示,每个节点均占用硬件存储器中特定长度的存储空间。在图3A中,每个节点占用32个比特位,其中,每个指针占用4个比特位,因此属于同一个双向链表的相邻节点允许最大跨越15个节点;在图3B中,每个节点占用64个比特位,其中,每个指针占用11个比特位,因此属于同一个双向链表的相邻节点允许最大跨越2047个节点。0061图4为本发明所述哈希表添加方法实施例的流程图,如图所示,包括如下步骤0062步骤110,提取待添加数据的关键字。0063步骤120,对所述关键字。

21、进行哈希运算得到哈希地址及哈希指纹。0064具体的哈希运算过程可参考现有技术,其中,得到哈希地址的哈希运算与得到哈希指纹的哈希运算有可能是不同的运算过程。0065步骤130,根据所述哈希地址判断相应的目标存储位置是否被占用,当未被占用时,执行步骤140,否则执行步骤150。0066具体地,如前所述,可以根据所述目标存储位置的目标节点的标志字段的值确定其存储位置是否被占用。0067步骤140,根据所述哈希指纹,在所述目标存储位置添加目标节点,构成单节点的双向链表。0068具体地,在所述目标节点的指纹字段保存所述哈希指纹,将标示字段的值设置为“1”,将前向指针及后向指针的值均设置为“0”。例如,在。

22、进行添加操作之前的哈希表如图1所示,假设一个待添加数据X的关键字通过哈希运算后得到的哈希地址为9,哈希指纹为FMX,如图5A所示,经过步骤140的添加操作后,在地址为9的目标存储位置创建了一个新的双向链表,该双向链表只具有一个节点,即所述目标节点,其内容为1,0,0,FMX。0069步骤150,在所述哈希表中查找未被占用空闲存储位置,并判断所述目标存储位置处的占用节点是否为一个双向链表的首节点,是则执行步骤151,否则执行步骤152。0070其中,占用节点是指占用所述目标存储位置的节点,具体地,当该占用节点的前向指针字段的值为0时,则表明该占用节点之前并不与其他节点相链接,因此该占用节点为双向。

23、链表的首节点,否则该占用节点不是双向链表的首节点。具体地,所述空闲存储位置可以是位于所述目标存储位置之后,且距离最近的空闲存储位置。0071此处需要说明的是,如果所述双向链表为单节点链表,则可以认为该单节点既为首节点,也为尾节点。0072步骤151,根据所述哈希指纹,在所述空闲存储位置添加目标节点,并将该目标节点链接到所述占用节点所在双向链表的链尾。0073例如,在进行添加操作之前的哈希表如图1所示,假设一个待添加数据X的关键字通过哈希运算后得到的哈希地址为5,哈希指纹为FMX,如图5B所示,在哈希地址为5的目标存储位置处的占用节点H1为一个双向链表的首节点,因此,经过步骤151的添加操作后,。

24、在地址为9的空闲存储位置处添加了目标节点X,并将该目标节点X链接在原先的尾节点T1之后成为新的尾节点。0074步骤152,将所述占用节点移动到所述空闲存储位置,并将该占用节点链接到该占用节点所在双向链表的链尾,根据所述哈希指纹,在所述目标存储位置添加目标节点,构成单节点的双向链表。说明书CN102314485ACN102314489A5/7页80075例如,在进行添加操作之前的哈希表如图1所示,假设一个待添加数据X的关键字通过哈希运算后得到的哈希地址为6,哈希指纹为FMX,如图1所示,在哈希地址为6的目标存储位置处的占用节点M1不是一个双向链表的首节点,因此,经过步骤152的添加操作后,如图5。

25、C所示,该占用节点T1被移动到地址为9的空闲存储位置,并将该占用节点M1链接到该占用节点M1所在双向链表的链尾成为新的尾节点,这样做的目的是为了空出地址为6的目标存储位置;然后,在地址为6的目标存储位置添加了目标节点X,构成单节点的双向链表。0076图6为本发明所述哈希表查找方法实施例的流程图,如图所示,包括如下步骤0077步骤210,提取待查找数据的关键字。0078步骤220,对所述关键字进行哈希运算得到哈希地址及哈希指纹。0079具体的哈希运算过程可参考现有技术,其中,得到哈希地址的哈希运算与得到哈希指纹的哈希运算有可能是不同的运算过程。0080步骤230,根据所述哈希地址,在采用图4所示。

26、方法而形成的哈希表中,读取相应目标存储位置处的疑似节点的内容,当该疑似节点中的哈希指纹与所述关键字的哈希指纹相匹配时,则查找成功,结束查找;否则继续执行步骤240。0081其中,所述疑似节点是指有可能是要查找的目标节点的节点,如果指纹匹配成功,则可以确定该疑似节点就是目标节点,否则还要继续寻找。0082步骤240,判断所述疑似节点是否为一个双向链表的首节点,是则继续执行步骤250,否则查找失败,结束查找。0083从上述添加过程可以看出,在图5B中,虽然新添加的节点X占用的是地址为9的存储位置,但该节点X实际上对应的存储位置的地址为5,因此,当所述疑似节点不是一个双向链表的首节点时,表明该疑似节。

27、点仅仅是恰巧占用了所述目标存储位置的一个不相关的节点,而非要找的目标节点。而该哈希表中已不可能存在要找的目标节点,因此查找失败。0084此处需要说明的是,如果所述双向链表为单节点链表,则可以认为该疑似节点既为首节点,也为尾节点。0085步骤250,对所述疑似节点所在的双向链表进行遍历查找,当该双向链表中的一个节点的哈希指纹与所述关键字的哈希指纹相匹配时,则查找成功;否则查找失败。0086其中,所述遍历查找是指从作为链首的所述疑似节点开始,沿着所述双向链表逐个节点地向后查找。例如,如图5B所示,假设根据所述哈希地址为5,则在该目标存储位置首先找到的疑似节点为节点H1,然后沿着节点H1向后找到节点。

28、M1,指纹匹配结果为不匹配,因此继续向后找到节点T1,指纹匹配结果仍然为不匹配;因此继续向后找到节点X,指纹匹配结果为匹配,此时查找成功。0087图7为本发明所述哈希表删除方法实施例的流程图,如图所示,包括如下步骤0088步骤310,采用图6所示方法在采用图4所示方法而形成的哈希表中查找到要删除的目标节点。0089步骤320,将所述目标节点从相应的存储位置删除。0090步骤330,当所述目标节点在双向链表中还链接有后续节点时,将该后续节点在所述双向链表中的位置前移。说明书CN102314485ACN102314489A6/7页90091其中,所述后续节点是指链接在目标节点之后的节点,进行前移的。

29、目的是为了在将目标节点删除后,保持双向链表中余下节点的连续性。0092通过采用本发明上述各实施例所述的添加、查找和删除的方法,可以形成具有双向链表的哈希表,适合硬件实现,并在单个查找引擎顺序查找及不增加存储器使用量的前提下,有效解决哈希冲突,提高哈希表的利用效率,并最大限度的利用存储空间,实现大容量的数据存储。0093图8为本发明所述哈希表添加装置实施例的结构示意图,能够实现上述哈希表添加方法,如图所示,该哈希表添加装置10包括提取模块11、运算模块12、第一判断模块13、第二判断模块14、第一添加执行模块15及第二添加执行模块16,其工作原理如下0094首先由提取模块11提取待添加数据的关键。

30、字;然后由运算模块12对提取模块11提取出的所述关键字进行哈希运算得到哈希地址及哈希指纹。0095此后,第一判断模块13根据运算模块12得到的所述哈希地址判断相应的目标存储位置是否被占用,当第一判断模块13判断出所述目标存储位置未被占用时,由第二添加执行模块16根据运算模块12得到的所述哈希指纹,在所述目标存储位置添加目标节点,构成单节点的双向链表,具体的举例可参见图5A及其相关说明。0096当第一判断模块13判断出所述目标存储位置被占用时,由第二判断模块14在所述哈希表中查找未被占用空闲存储位置,并判断所述目标存储位置处的占用节点是否为一个双向链表的首节点;当第二判断模块14的判断结果为是时。

31、,由第一添加执行模块15根据运算模块12得到的所述哈希指纹,在所述空闲存储位置添加目标节点,并将该目标节点链接到所述占用节点所在双向链表的链尾,。0097当第二判断模块14的判断结果为否时,由第一添加执行模块15将所述占用节点移动到所述空闲存储位置,并将该占用节点链接到该占用节点所在双向链表的链尾,根据运算模块12得到的所述哈希指纹,在所述目标存储位置添加目标节点,构成单节点的双向链表,具体的举例可参见图5C及其相关说明。0098图9为本发明所述哈希表查找装置实施例的结构示意图,能够实现上述哈希表查找方法,如图所示,该哈希表查找装置20包括提取模块21、运算模块22、读取模块23、判断模块24。

32、及查找模块25,其工作原理如下0099首先由提取模块21提取待查找数据的关键字;然后由运算模块22对提取模块21提取的所述关键字进行哈希运算得到哈希地址及哈希指纹;进而由读取模块23运算模块22得到的所述哈希地址,在采用上述哈希表添加方法而形成的哈希表中,读取相应目标存储位置处的疑似节点的内容。0100此后,当读取模块23读取的该疑似节点中的哈希指纹与所述关键字的哈希指纹相匹配时,则查找成功,结束查找;而当当读取模块23读取的该疑似节点中的哈希指纹与所述关键字的哈希指纹不匹配时,继续由判断模块24判断所述疑似节点是否为一个双向链表的首节点。0101当判断模块24判断出所述疑似节点为一个双向链表。

33、的首节点时,由查找模块25对所述疑似节点所在的双向链表进行遍历查找,当该双向链表中的一个节点的哈希指纹与所述关键字的哈希指纹相匹配时,则查找成功,结束查找;否则查找失败,结束查找;否则,如果判断模块24判断出所述疑似节点为不是一个双向链表的首节点时,则查找失败,结束说明书CN102314485ACN102314489A7/7页10查找。0102图10为本发明所述哈希表删除装置实施例的结构示意图,能够实现上述哈希表删除方法,如图所示,该哈希表删除装置30包括查找模块31、删除执行模块32及移位模块33,其工作原理如下0103首先由查找模块31采用上述哈希表查找方法在采用上述哈希表添加方面而形成的。

34、哈希表中查找到要删除的目标节点;然后由删除执行模块32将查找模块31查找到的所述目标节点从相应的存储位置删除;另外,当查找模块31查找到的所述目标节点在双向链表中还链接有后续节点时,进一步由移位模块33将该后续节点在所述双向链表中的位置前移。0104通过采用本发明上述各实施例所述的添加、查找和删除的装置,可以形成具有双向链表的哈希表,适合硬件实现,并在单个查找引擎顺序查找及不增加存储器使用量的前提下,有效解决哈希冲突,提高哈希表的利用效率,并最大限度的利用存储空间,实现大容量的数据存储。0105本领域普通技术人员可以理解实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的。

35、程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。0106最后应说明的是以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。说明书CN102314485ACN102314489A1/6页11图1图2图3A图3B说明书附图CN102314485ACN102314489A2/6页12图4图5A说明书附图CN102314485ACN102314489A3/6页13图5B图5C说明书附图CN102314485ACN102314489A4/6页14图6图7说明书附图CN102314485ACN102314489A5/6页15图8图9说明书附图CN102314485ACN102314489A6/6页16图10说明书附图CN102314485A。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1