基于内存的散列表的构建方法、文本查找方法及相应装置的制造方法_3

文档序号:8258855阅读:来源:国知局
”对应的目标散列值,该目标散列值由使用第一个从散列函数H2对“C”进行散列得到的第一从散列值H2 (C)和使用第二个从散列函数H3对“C”进行散列得到的第二从散列值H3(C)拼接而成;
[0074]第三个节点,第三个节点的信息域中存储有使用“F”对应的目标散列值,该目标散列值由使用第一个从散列函数H2对“F”进行散列得到的第一从散列值H2 (F)和使用第二个从散列函数H3对“F”进行散列得到的第二从散列值H3 (F)拼接而成。
[0075]使用主散列函数,分别对“B”和“D”进行散列之后,得到的主散列值相同,进而会得到相同的散列表入口地址“3”,内存中散列表入口地址“3”处存储有用于指向与散列表入口地址“3”对应的单向链表的表头指针F (3),在该单向链表中,共有两个节点:
[0076]第一个节点,第一个节点的信息域中存储有使用“B”对应的目标散列值,该目标散列值由使用第一个从散列函数H2对“B”进行散列得到的第一从散列值H2 (B)和使用第二个从散列函数H3对“B”进行散列得到的第二从散列值H3 (B)拼接而成;
[0077]第二个节点,第二个节点的信息域中存储有使用“D”对应的目标散列值,该目标散列值由使用第一个从散列函数H2对“D”进行散列得到的第一从散列值H2 (D)和使用第二个从散列函数H3对“D”进行散列得到的第二从散列值H3 (D)拼接而成。
[0078]使用主散列函数,对“E”进行散列得到主散列值之后,进一步得到散列表入口地址“4”,内存中散列表入口地址“4”处存储有用于指向与散列表入口地址“4”对应的单向链表的表头指针F(4),在该单向链表中,共有一个节点,该节点的信息域中存储有使用“E”对应的目标散列值,该目标散列值由使用第一个从散列函数H2对“E”进行散列得到的第一从散列值H2(E)和使用第二个从散列函数H3对“E”进行散列得到的第二从散列值H3 (E)拼接rfn 。
[0079]在本实施例中,在使用主散列函数,计算得到文本数据对应的主散列值,并对该主散列值进行再散列得到散列表入口地址之后,会再次对文本数据分别使用两个从散列函数进行散列,将散列结果合并成一个新的散列串,并将散列串放入所述散列表入口地址对应的单向链表节点的信息域。而传统的链地址法是在信息域中存放原文本数据。由于一般情况下散列结果的长度要远远小于原文本数据的长度,即使两个散列结果拼接在一起依然如此,所以本实施例提供的技术方案较之传统做法,会节省一定的内存。
[0080]实施例三
[0081]图3是本发明实施例三提供的一种文本查找方法的流程示意图。本实施例在执行完毕基于内存的散列表的构建方法之后,进一步提供一种查找文本数据的方法,该方法可由文本查找装置执行,所述装置由软件和/或硬件实现。参见图3,本实施例提供的文本查找方法具体包括如下操作:
[0082]操作310、获取本次待查找的文本数据。
[0083]操作320、使用预设的主散列函数,计算本次待查找的文本数据对应的主散列值,并根据设定的映射算法确定主散列值对应的散列表入口地址。
[0084]操作330、使用预设的至少一个从散列函数,计算本次待查找的文本数据对应的从散列值,并基于从散列值得到目标散列值。
[0085]操作340、遍历内存中构建的散列表中与散列表入口地址对应的单向链表,查找单向链表中是否存在信息域包含有目标散列值的节点。
[0086]具体的,如果查找到单向链表中存在信息域包含有目标散列值的节点,则判断查找成功,内存中存储有所述本次待查找的文本数据,将本次确定的散列表入口地址作为与本次待查找的文本数据这一输入对应的输出,返回给其他应用模块;否则,则判断查找失败,内存中未存储有所述本次待查找的文本数据。
[0087]需要说明的是,由于本实施例是以本发明任意实施例提供的基于内存的散列表的构建方法为基础,进一步提供的文本查找方法,所以本实施例中所涉及的主散列函数、映射算法以及从散列函数,应与基于内存的散列表的构建方法中所采用的主散列函数、映射算法以及从散列函数保持一致。
[0088]本实施例提供的技术方案,在根据预先构建的基于内存的散列表,查找内存中是否存储有文本数据时,需要遍历匹配的内容是单向链表中节点上信息域内的目标散列值,而非原始的文本数据,从而可以加快匹配速度,降低匹配难度。
[0089]实施例四
[0090]图4是本发明实施例四提供的一种文本查找方法的流程示意图。本实施例以上述实施例三为基础,提供一优选实施例。本实施例可在采用实施例二执行完毕基于内存的散列表的构建方法之后,进一步提供一种文本查找方法。参见图4,本实施例提供的文本查找方法具体包括如下操作:
[0091]操作410、获取本次待查找的文本数据。
[0092]操作420、使用预设的主散列函数,计算本次待查找的文本数据对应的主散列值,并根据质数取余法确定主散列值对应的散列表入口地址。
[0093]操作430、判断内存中构建的散列表中所述散列表入口地址处,是否存储有用于指向与所述散列表入口地址对应的单向链表的表头指针。
[0094]如果是,执行操作440,否则,判定内存中未存储有所述本次待查找的文本数据,结束流程。
[0095]操作440、分别使用预设的两个从散列函数,计算本次待查找的文本数据对应的从散列值,并将计算得到的两个从散列值合并在一起,生成目标散列值。
[0096]操作450、遍历所述表头指针指向的单向链表,将本次生成的目标散列值与所述单向链表中各个节点的信息域内的目标散列值进行匹配。
[0097]操作460、判断所述单向链表中是否有匹配成功的目标散列值。如果是,执行操作470,否则,判定内存中未存储有所述本次待查找的文本数据,结束流程。
[0098]操作470、判定内存中存储有本次待查找的文本数据,并输出本次确定的散列表入口地址。
[0099]本实施例提供的技术方案,在根据预先构建的基于内存的散列表,查找内存中是否存储有文本数据时,需要遍历匹配的内容是单向链表中节点上信息域内的目标散列值,而非原始的文本数据,从而可以加快匹配速度,降低匹配难度。
[0100]实施例五
[0101]图5是本发明实施例五提供的一种基于内存的散列表的构建装置的结构示意图。参见图5,该装置的结构具体包括:
[0102]文本数据获取单元510,用于获取用于查找的文本数据;
[0103]散列表入口地址确定单元520,用于使用预设的主散列函数,计算所述文本数据对应的主散列值,并根据设定的映射算法确定所述主散列值对应的散列表入口地址;
[0104]目标散列值生成单元530,用于使用预设的至少一个从散列函数,计算所述文本数据对应的从散列值,并基于所述从散列值得到目标散列值;
[0105]目标散列值存储单元540,用于将所述目标散列值存储至内存中与所述散列表入口地址对应的单向链表,以构建散列表。
[0106]示例性的,所述目标散列值生成单元530,具体用于:
[0107]分别使用预设的多个从散列函数中的各个从散列函数,计算所述文本数据对应的从散列值;
[0108]将计算得到的各个从散列值合并在一起,生成目标散列值。
[0109]示例性的,所述目标散列值存储单元540,具体用于:
[0110]判断内存中所述散列表入口地址处,是否存储有用于指向与所述散列表入口地址对应的单向链表的表头指针;
[0111]如果是,则在所述单向链表的队尾插入一个新节点,将所述目标散列值存储至所述新节点中的信息域;
[0112]如果否,则创建用于指向与所述散列表入口地址对应的单向链表的表头指针,存储至所述散列表入口地址处,并在所述内存中的所述表头指针指向的存储位置处,创建所述单向链表的第一个节点
当前第3页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1