CN104572983B - 基于内存的散列表的构建方法、文本查找方法及相应装置 - Google Patents
基于内存的散列表的构建方法、文本查找方法及相应装置 Download PDFInfo
- Publication number
- CN104572983B CN104572983B CN201410856681.1A CN201410856681A CN104572983B CN 104572983 B CN104572983 B CN 104572983B CN 201410856681 A CN201410856681 A CN 201410856681A CN 104572983 B CN104572983 B CN 104572983B
- Authority
- CN
- China
- Prior art keywords
- hash
- hashed value
- text data
- target
- hash table
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1009—Address translation using page tables, e.g. page table structures
- G06F12/1018—Address translation using page tables, e.g. page table structures involving hashing techniques, e.g. inverted page tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/13—File access structures, e.g. distributed indices
- G06F16/137—Hash-based
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/40—Specific encoding of data in memory or cache
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例公开了基于内存的散列表的构建方法、文件查找方法及相应装置。其中,基于内存的散列表的构建方法包括:获取用于查找的文本数据;使用预设的主散列函数,计算文本数据对应的主散列值,并根据设定的映射算法确定主散列值对应的散列表入口地址;使用预设的至少一个从散列函数,计算文本数据对应的从散列值,并基于从散列值得到目标散列值;将目标散列值存储至内存中与散列表入口地址对应的单向链表,以构建散列表。本发明实施例提供的技术方案,能够更好的提高内存利用率,更加节约内存。
Description
技术领域
本发明实施例涉及计算机技术领域,尤其涉及基于内存的散列表的构建方法、文件查找方法及相应装置。
背景技术
散列函数是一种从任何一种数据中创建小的数字“指纹”的方法,可以把任何一种数据(例如消息)压缩成摘要。所述摘要,也即散列值,其基本特性包括:如果两个散列值是不同的,那么对应的两个原始数据也是不同的(同一散列函数),如果两个散列值相同,那么两个原始数据可能相同,也可能不同;典型的散列函数都是无限定义域和有限的值域,一般散列值的长度比原始值长度要小。
散列表技术是散列函数的一个主要应用,常用于数据的快速查找,其基本思想把数据在散列表中的存储位置和该数据的散列值之间建立一种映射关系,散列值在这种映射关系下的像,就是相应记录在散列表中的存储位置。
在通常情况下,散列函数是一个压缩映像,因此无论如何设计散列函数,也无法完全避免散列冲突(即不同数据的散列值相同)的问题。而链地址法(开散列法)是一种常见的解决冲突的方法,其做法是将所有冲突的数据链接在同一个单向链表中,并将散列表定义为由B(表长)个单表头指针组成的指针数据F[0,1,….,B-1]。
链地址法本身是内存利用率比较高的一种处理冲突方法。若选择的散列函数能使同义词(散列值相同的不同数据)的个数等于散列表的平均长度:n/B(n为数据的个数),则查找定位的时间将是一个小常数(与单向链表F[i]的最大长度相关)。
目前,海量数据处理中常用到文本的查找定位。采用上述链地址法,在内存中构建用于查找海量文本的散列表的方案,虽然在一定程度上提高了内存利用率,但其提高效果并不是十分显著,依然会占用较多内存。
发明内容
本发明实施例提供基于内存的散列表的构建方法、文件查找方法及相应装置,以更好的提高内存利用率,更加节约内存。
一方面,本发明实施例提供了一种基于内存的散列表的构建方法,该方法包括:
获取用于查找的文本数据;
使用预设的主散列函数,计算所述文本数据对应的主散列值,并根据设定的映射算法确定所述主散列值对应的散列表入口地址;
使用预设的至少一个从散列函数,计算所述文本数据对应的从散列值,并基于所述从散列值得到目标散列值;
将所述目标散列值存储至内存中与所述散列表入口地址对应的单向链表,以构建散列表。
另一方面,本发明实施例还提供了一种文件查找方法,该方法包括:
获取本次待查找的文本数据;
使用预设的主散列函数,计算所述文本数据对应的主散列值,并根据设定的映射算法确定所述主散列值对应的散列表入口地址;
使用预设的至少一个从散列函数,计算所述文本数据对应的从散列值,并基于所述从散列值得到目标散列值;
遍历内存中构建的散列表中与所述散列表入口地址对应的单向链表,查找所述单向链表中是否存在信息域包含有所述目标散列值的节点。
再一方面,本发明实施例还提供了一种基于内存的散列表的构建装置,该装置包括:
文本数据获取单元,用于获取用于查找的文本数据;
散列表入口地址确定单元,用于使用预设的主散列函数,计算所述文本数据对应的主散列值,并根据设定的映射算法确定所述主散列值对应的散列表入口地址;
目标散列值生成单元,用于使用预设的至少一个从散列函数,计算所述文本数据对应的从散列值,并基于所述从散列值得到目标散列值;
目标散列值存储单元,用于将所述目标散列值存储至内存中与所述散列表入口地址对应的单向链表,以构建散列表。再一方面,本发明实施例还提供了一种文件查找装置,该装置包括:
文本数据获取单元,用于获取本次待查找的文本数据;
散列表入口地址确定单元,用于使用预设的主散列函数,计算所述文本数据对应的主散列值,并根据设定的映射算法确定所述主散列值对应的散列表入口地址;
目标散列值生成单元,用于使用预设的至少一个从散列函数,计算所述文本数据对应的从散列值,并基于所述从散列值得到目标散列值;
目标散列值查找单元,用于遍历内存中构建的散列表中与所述散列表入口地址对应的单向链表,查找所述单向链表中是否存在信息域包含有所述目标散列值的节点。
在本发明实施例中,在使用一种散列函数,计算得到文本数据对应的散列值,并对该散列值进行再散列得到散列表入口地址之后,并不是如传统的链地址法那样直接将文本数据本身存储至内存中该散列表入口地址对应的单向链表,而是使用另外一些散列函数计算文本数据对应的其他散列值,并基于得到的其他散列值生成目标散列值,进而将目标散列值存储至内存中该散列表入口地址对应的单向链表,以构建散列表。由于散列技术具备如下特性:通过散列函数得到的散列值的长度要小于文本数据的长度,因此本发明实施例提供的技术方案,不仅能够解决散列冲突的问题,而且所构建的散列表占用的内存更少,节约了内存资源。
附图说明
图1是本发明实施例一提供的一种基于内存的散列表的构建方法的流程示意图;
图2A是本发明实施例二提供的一种基于内存的散列表的构建方法的流程示意图;
图2B是本发明实施例二提供的一种在内存中构建的散列表的结构示意图;
图3是本发明实施例三提供的一种文本查找方法的流程示意图;
图4是本发明实施例四提供的一种文本查找方法的流程示意图;
图5是本发明实施例五提供的一种基于内存的散列表的构建装置的结构示意图;
图6是本发明实施例六提供的一种文本查找装置的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
实施例一
图1是本发明实施例一提供的一种基于内存的散列表的构建方法的流程示意图。本实施例可适用于在内存中构建用于查找文本数据是否存在的散列表的情况。在本发明实施例中,所述文本数据可以是诸如微博评论等任何文本格式的数据。该方法可以由基于内存的散列表的构建装置来执行,所述装置可由软件和/或硬件实现。针对传统的链地址法在构建海量文本的散列表时会发生内存紧张的问题,本实施例通过多散列函数构建链地址法中的各个单链表,以达到进一步节省内存的目的。
参见图1,本实施例提供的基于内存的散列表的构建方法具体包括如下操作:
操作110、获取用于查找的文本数据。
操作120、使用预设的主散列函数,计算文本数据对应的主散列值,并根据设定的映射算法确定主散列值对应的散列表入口地址。
在本实施例中,可预先选择适合文本特征的散列函数,作为主散列函数。为尽可能达到均匀散列的目的,还可从备选的多个散列函数中通过测试挑选出均匀散列性能最优的散列函数,作为主散列函数,这样可以提升后续将主散列值映射到散列表入口地址过程的再散列效果。
示例性的,备选的多个散列函数可具体包括如下至少两个函数:BKDRHash函数、APHash函数、DJBHash函数、JSHash函数、RSHash函数、SDBMHash函数、PJWHash函数、ELFHash函数和DEKHash函数。
示例性的,上述用于确定主散列值对应的散列表入口地址的映射算法,可为质数取余法、平方取中法或折叠法。
操作130、使用预设的至少一个从散列函数,计算文本数据对应的从散列值,并基于从散列值得到目标散列值。
在本实施例中,从散列函数也可为上述备选的多个散列函数中的任一散列函数,但是为解决散列冲突的问题,须保证从散列函数与主散列函数不同。也即,主散列函数和从散列函数为BKDRHash函数、APHash函数、DJBHash函数、JSHash函数、RSHash函数、SDBMHash函数、PJWHash函数、ELFHash函数和DEKHash函数中两种不同的散列函数。
示例性的,使用预设的至少一个从散列函数,计算文本数据对应的从散列值,并基于从散列值得到目标散列值,具体包括:
分别使用预设的多个从散列函数中的各个从散列函数,计算文本数据对应的从散列值;
将计算得到的各个从散列值合并在一起,生成目标散列值。
具体的,为了更好的保证在得到文本数据的主散列值之后,再次得到的目标散列值不会发生冲突,本实施例可将计算得到的各个从散列值拼接在一起,生成一个新的散列串,作为目标散列值。
当然,本领域普通技术人员应理解,本实施例也可以仅使用预设的一个从散列函数,计算文本数据对应的从散列值,并将该从散列值作为目标散列值。
操作140、将目标散列值存储至内存中与散列表入口地址对应的单向链表,以构建散列表。
示例性的,将目标散列值存储至内存中散列表入口地址指向的单向链表,具体包括:判断内存中散列表入口地址处,是否存储有用于指向与散列表入口地址对应的单向链表的表头指针;如果是,则在单向链表的队尾插入一个新节点,将目标散列值存储至新节点中的信息域;如果否,则创建用于指向与散列表入口地址对应的单向链表的表头指针,存储至散列表入口地址处,并在内存中的所述表头指针指向的存储位置处,创建单向链表的第一个节点,将目标散列值存储至第一个节点中的信息域。
在上述示例中,当判断内存中散列表入口地址处,存储有用于指向与散列表入口地址对应的单向链表的表头指针时,则会识别到发生了散列冲突。
在本实施例中,在使用一种散列函数,计算得到文本数据对应的散列值,并对该散列值进行再散列得到散列表入口地址之后,并不是如传统的链地址法那样直接将文本数据本身存储至内存中该散列表入口地址对应的单向链表,而是针对传统的链地址法作了如下改进:使用另外一些散列函数计算文本数据对应的其他散列值,并基于得到的其他散列值生成目标散列值,进而将目标散列值存储至内存中该散列表入口地址对应的单向链表,以构建散列表。由于散列技术具备如下特性:通过散列函数得到的散列值的长度要小于文本数据的长度,因此本实施例提供的技术方案,不仅能够解决散列冲突的问题,而且所构建的散列表占用的内存更少,节约了内存资源。
实施例二
图2A是本发明实施例二提供的一种基于内存的散列表的构建方法的流程示意图。本实施例在上述实施例一的基础上,提供一种优选实施例。本实施例提供的基于内存的散列表的构建方法,可以是在主频为2.2GHz的intel core i7CPU、内存为32GB的硬件环境和基于Visual C++的开发环境的windows2008server系统下进行的。参见图2A,本实施例提供的基于内存的散列表的构建方法具体包括如下操作:
操作210、判断预设的数据集中是否存在未获取的用于查找的文本数据。如果是,执行操作220,否则结束流程。
操作220、从数据集中获取一条用于查找的文本数据。执行操作230。
操作230、使用预设的主散列函数,计算本次获取的文本数据对应的主散列值,并根据质数取余法确定主散列值对应的散列表入口地址。执行操作240。
示例性的,本实施例中的主散列函数可优选为均匀散列性能较为优秀的BKDRHash函数。
根据质数取余法确定主散列值对应的散列表入口地址,具体为:将主散列值与预设值进行取模运算,得到主散列值对应的散列表入口地址。其中,预设值可为一个质数,该质数大于预设的数据集中用于查找的文本数据的条数(也即文本数据长度),小于散列表桶数量(也即散列表长度)。
操作240、判断内存中散列表入口地址处,是否存储有用于指向与散列表入口地址对应的单向链表的表头指针。如果是,执行操作250,否则执行操作260。
操作250、在单向链表的队尾插入一个新节点,作为当前节点。执行操作280。
操作260、创建用于指向与散列表入口地址对应的单向链表的表头指针,存储至散列表入口地址处。执行操作270。
操作270、在内存中的所述表头指针指向的存储位置处,创建单向链表的第一个节点,作为当前节点。执行操作280。
操作280、分别使用预设的两个从散列函数,计算本次获取的文本数据对应的从散列值,并将计算得到的两个从散列值合并在一起,生成目标散列值。执行操作290。
操作290、将目标散列值存储至当前节点中的信息域。返回操作210,继续执行。
本实施例的一个关键点在于,两条文本数据的不同散列结果同时冲突的几率是非常低的,例如有测试结果证明,使用业界著名的BKDRHash函数,对100000个无意义字母和数字组成的随机串散列后,散列值冲突为2个,对100000个有意义英文句子的散列值冲突为0个。当不同的文本数据在散列表中的散列表入口地址冲突时,会进入此散列表入口地址对应的单向链表,只要保证在该单向链表内不同条文本数据的目标散列值不冲突即可唯一区分各条文本数据。而在散列表的长度为大于文本数据长度的素数,且主散列函数是比较均匀分布的情况下,同一个散列表入口内地址对应的单向链表长度一般较短。所以,一般使用一个不同于主散列函数的从散列函数来得到目标散列值,基本可以保证单向链表内不同文本数据的目标散列值不发生冲突,而本实施例使用两个不同散列函数,则能够更好的避免散列冲突的发生。
例如,即使以BKDRHash的实验结果中的随机串为例,假设单向链表的长度为100,那么在单向链表内使用单个散列函数发生散列冲突的几率为(2/100000)*100=1/500,而使用两个不同散列函数发生散列冲突几率为1/250000。所以,在本实施例中采用两个不同的优秀散列函数是可以满足不冲突要求的,当然也可以通过进一步通过增加从散列函数的方法来进一步降低散列冲突概率。
图2B是本发明实施例二提供的一种在内存中构建的散列表的结构示意图。参见图2B,预设的文本集201中包括6条用于查找的文本数据:“A”、“B”、“C”、“D”、“E”和“F”(此处仅作为示例加以说明,在实际当中,每条用于查找的文本数据会由多个字符串组成),散列表202的长度为7,散列表入口地址分别为0-6。
使用主散列函数,分别对“A”、“C”和“F”进行散列之后,得到的主散列值相同,进而会得到相同的散列表入口地址“1”,内存中散列表入口地址“1”处存储有用于指向与散列表入口地址“1”对应的单向链表的表头指针F(1),在该单向链表中,共有三个节点:
第一个节点,第一个节点的信息域中存储有使用“A”对应的目标散列值,该目标散列值由使用第一个从散列函数H2对“A”进行散列得到的第一从散列值H2(A)和使用第二个从散列函数H3对“A”进行散列得到的第二从散列值H3(A)拼接而成;
第二个节点,第二个节点的信息域中存储有使用“C”对应的目标散列值,该目标散列值由使用第一个从散列函数H2对“C”进行散列得到的第一从散列值H2(C)和使用第二个从散列函数H3对“C”进行散列得到的第二从散列值H3(C)拼接而成;
第三个节点,第三个节点的信息域中存储有使用“F”对应的目标散列值,该目标散列值由使用第一个从散列函数H2对“F”进行散列得到的第一从散列值H2(F)和使用第二个从散列函数H3对“F”进行散列得到的第二从散列值H3(F)拼接而成。
使用主散列函数,分别对“B”和“D”进行散列之后,得到的主散列值相同,进而会得到相同的散列表入口地址“3”,内存中散列表入口地址“3”处存储有用于指向与散列表入口地址“3”对应的单向链表的表头指针F(3),在该单向链表中,共有两个节点:
第一个节点,第一个节点的信息域中存储有使用“B”对应的目标散列值,该目标散列值由使用第一个从散列函数H2对“B”进行散列得到的第一从散列值H2(B)和使用第二个从散列函数H3对“B”进行散列得到的第二从散列值H3(B)拼接而成;
第二个节点,第二个节点的信息域中存储有使用“D”对应的目标散列值,该目标散列值由使用第一个从散列函数H2对“D”进行散列得到的第一从散列值H2(D)和使用第二个从散列函数H3对“D”进行散列得到的第二从散列值H3(D)拼接而成。
使用主散列函数,对“E”进行散列得到主散列值之后,进一步得到散列表入口地址“4”,内存中散列表入口地址“4”处存储有用于指向与散列表入口地址“4”对应的单向链表的表头指针F(4),在该单向链表中,共有一个节点,该节点的信息域中存储有使用“E”对应的目标散列值,该目标散列值由使用第一个从散列函数H2对“E”进行散列得到的第一从散列值H2(E)和使用第二个从散列函数H3对“E”进行散列得到的第二从散列值H3(E)拼接而成。
在本实施例中,在使用主散列函数,计算得到文本数据对应的主散列值,并对该主散列值进行再散列得到散列表入口地址之后,会再次对文本数据分别使用两个从散列函数进行散列,将散列结果合并成一个新的散列串,并将散列串放入所述散列表入口地址对应的单向链表节点的信息域。而传统的链地址法是在信息域中存放原文本数据。由于一般情况下散列结果的长度要远远小于原文本数据的长度,即使两个散列结果拼接在一起依然如此,所以本实施例提供的技术方案较之传统做法,会节省一定的内存。
实施例三
图3是本发明实施例三提供的一种文本查找方法的流程示意图。本实施例在执行完毕基于内存的散列表的构建方法之后,进一步提供一种查找文本数据的方法,该方法可由文本查找装置执行,所述装置由软件和/或硬件实现。参见图3,本实施例提供的文本查找方法具体包括如下操作:
操作310、获取本次待查找的文本数据。
操作320、使用预设的主散列函数,计算本次待查找的文本数据对应的主散列值,并根据设定的映射算法确定主散列值对应的散列表入口地址。
操作330、使用预设的至少一个从散列函数,计算本次待查找的文本数据对应的从散列值,并基于从散列值得到目标散列值。
操作340、遍历内存中构建的散列表中与散列表入口地址对应的单向链表,查找单向链表中是否存在信息域包含有目标散列值的节点。
具体的,如果查找到单向链表中存在信息域包含有目标散列值的节点,则判断查找成功,内存中存储有所述本次待查找的文本数据,将本次确定的散列表入口地址作为与本次待查找的文本数据这一输入对应的输出,返回给其他应用模块;否则,则判断查找失败,内存中未存储有所述本次待查找的文本数据。
需要说明的是,由于本实施例是以本发明任意实施例提供的基于内存的散列表的构建方法为基础,进一步提供的文本查找方法,所以本实施例中所涉及的主散列函数、映射算法以及从散列函数,应与基于内存的散列表的构建方法中所采用的主散列函数、映射算法以及从散列函数保持一致。
本实施例提供的技术方案,在根据预先构建的基于内存的散列表,查找内存中是否存储有文本数据时,需要遍历匹配的内容是单向链表中节点上信息域内的目标散列值,而非原始的文本数据,从而可以加快匹配速度,降低匹配难度。
实施例四
图4是本发明实施例四提供的一种文本查找方法的流程示意图。本实施例以上述实施例三为基础,提供一优选实施例。本实施例可在采用实施例二执行完毕基于内存的散列表的构建方法之后,进一步提供一种文本查找方法。参见图4,本实施例提供的文本查找方法具体包括如下操作:
操作410、获取本次待查找的文本数据。
操作420、使用预设的主散列函数,计算本次待查找的文本数据对应的主散列值,并根据质数取余法确定主散列值对应的散列表入口地址。
操作430、判断内存中构建的散列表中所述散列表入口地址处,是否存储有用于指向与所述散列表入口地址对应的单向链表的表头指针。
如果是,执行操作440,否则,判定内存中未存储有所述本次待查找的文本数据,结束流程。
操作440、分别使用预设的两个从散列函数,计算本次待查找的文本数据对应的从散列值,并将计算得到的两个从散列值合并在一起,生成目标散列值。
操作450、遍历所述表头指针指向的单向链表,将本次生成的目标散列值与所述单向链表中各个节点的信息域内的目标散列值进行匹配。
操作460、判断所述单向链表中是否有匹配成功的目标散列值。如果是,执行操作470,否则,判定内存中未存储有所述本次待查找的文本数据,结束流程。
操作470、判定内存中存储有本次待查找的文本数据,并输出本次确定的散列表入口地址。
本实施例提供的技术方案,在根据预先构建的基于内存的散列表,查找内存中是否存储有文本数据时,需要遍历匹配的内容是单向链表中节点上信息域内的目标散列值,而非原始的文本数据,从而可以加快匹配速度,降低匹配难度。
实施例五
图5是本发明实施例五提供的一种基于内存的散列表的构建装置的结构示意图。参见图5,该装置的结构具体包括:
文本数据获取单元510,用于获取用于查找的文本数据;
散列表入口地址确定单元520,用于使用预设的主散列函数,计算所述文本数据对应的主散列值,并根据设定的映射算法确定所述主散列值对应的散列表入口地址;
目标散列值生成单元530,用于使用预设的至少一个从散列函数,计算所述文本数据对应的从散列值,并基于所述从散列值得到目标散列值;
目标散列值存储单元540,用于将所述目标散列值存储至内存中与所述散列表入口地址对应的单向链表,以构建散列表。
示例性的,所述目标散列值生成单元530,具体用于:
分别使用预设的多个从散列函数中的各个从散列函数,计算所述文本数据对应的从散列值;
将计算得到的各个从散列值合并在一起,生成目标散列值。
示例性的,所述目标散列值存储单元540,具体用于:
判断内存中所述散列表入口地址处,是否存储有用于指向与所述散列表入口地址对应的单向链表的表头指针;
如果是,则在所述单向链表的队尾插入一个新节点,将所述目标散列值存储至所述新节点中的信息域;
如果否,则创建用于指向与所述散列表入口地址对应的单向链表的表头指针,存储至所述散列表入口地址处,并在所述内存中的所述表头指针指向的存储位置处,创建所述单向链表的第一个节点,将所述目标散列值存储至所述第一个节点中的信息域。
在上述技术方案的基础上,所述主散列函数和所述从散列函数为BKDRHash函数、APHash函数、DJBHash函数、JSHash函数、RSHash函数、SDBMHash函数、PJWHash函数、ELFHash函数和DEKHash函数中两种不同的散列函数;
所述设定的映射算法为质数取余法、平方取中法或折叠法。
上述产品可执行本发明任意实施例所提供的基于内存的散列表的构建方法,具备执行方法相应的功能模块和有益效果。
实施例六
图6是本发明实施例六提供的一种文本查找装置的结构示意图。参见图6,该装置的结构具体包括:
文本数据获取单元610,用于获取本次待查找的文本数据;
散列表入口地址确定单元620,用于使用预设的主散列函数,计算所述文本数据对应的主散列值,并根据设定的映射算法确定所述主散列值对应的散列表入口地址;
目标散列值生成单元630,用于使用预设的至少一个从散列函数,计算所述文本数据对应的从散列值,并基于所述从散列值得到目标散列值;
目标散列值查找单元640,用于遍历内存中构建的散列表中与所述散列表入口地址对应的单向链表,查找所述单向链表中是否存在信息域包含有所述目标散列值的节点。
上述产品可执行本发明任意实施例所提供的文本查找方法,具备执行方法相应的功能模块和有益效果。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
Claims (8)
1.一种基于内存的散列表的构建方法,其特征在于,包括:
获取用于查找的文本数据;
使用预设的主散列函数,计算所述文本数据对应的主散列值,并根据设定的映射算法确定所述主散列值对应的散列表入口地址;
使用预设的至少一个从散列函数,计算所述文本数据对应的从散列值,并基于所述从散列值得到目标散列值;
将所述目标散列值存储至内存中与所述散列表入口地址对应的单向链表,以构建散列表;
其中,所述使用预设的至少一个从散列函数,计算所述文本数据对应的从散列值,并基于所述从散列值得到目标散列值,包括:
分别使用预设的多个从散列函数中的各个从散列函数,计算所述文本数据对应的从散列值;
将计算得到的各个从散列值合并在一起,生成目标散列值。
2.根据权利要求1所述的方法,其特征在于,将所述目标散列值存储至内存中与所述散列表入口地址对应的单向链表,以构建散列表,包括:
判断内存中所述散列表入口地址处,是否存储有用于指向与所述散列表入口地址对应的单向链表的表头指针;
如果是,则在所述单向链表的队尾插入一个新节点,将所述目标散列值存储至所述新节点中的信息域;
如果否,则创建用于指向与所述散列表入口地址对应的单向链表的表头指针,存储至所述散列表入口地址处,并在所述内存中的所述表头指针指向的存储位置处,创建所述单向链表的第一个节点,将所述目标散列值存储至所述第一个节点中的信息域。
3.根据权利要求1-2中任一项所述的方法,其特征在于,所述主散列函数和所述从散列函数为BKDRHash函数、APHash函数、DJBHash函数、JSHash函数、RSHash函数、SDBMHash函数、PJWHash函数、ELFHash函数和DEKHash函数中两种不同的散列函数;
所述设定的映射算法为质数取余法、平方取中法或折叠法。
4.一种文本查找方法,其特征在于,包括:
获取本次待查找的文本数据;
使用预设的主散列函数,计算所述文本数据对应的主散列值,并根据设定的映射算法确定所述主散列值对应的散列表入口地址;
使用预设的至少一个从散列函数,计算所述文本数据对应的从散列值,并基于所述从散列值得到目标散列值;
遍历内存中构建的散列表中与所述散列表入口地址对应的单向链表,查找所述单向链表中是否存在信息域包含有所述目标散列值的节点;
其中,所述使用预设的至少一个从散列函数,计算所述文本数据对应的从散列值,并基于所述从散列值得到目标散列值,包括:
分别使用预设的多个从散列函数中的各个从散列函数,计算所述文本数据对应的从散列值;
将计算得到的各个从散列值合并在一起,生成目标散列值。
5.一种基于内存的散列表的构建装置,其特征在于,包括:
文本数据获取单元,用于获取用于查找的文本数据;
散列表入口地址确定单元,用于使用预设的主散列函数,计算所述文本数据对应的主散列值,并根据设定的映射算法确定所述主散列值对应的散列表入口地址;
目标散列值生成单元,用于使用预设的至少一个从散列函数,计算所述文本数据对应的从散列值,并基于所述从散列值得到目标散列值;
目标散列值存储单元,用于将所述目标散列值存储至内存中与所述散列表入口地址对应的单向链表,以构建散列表;
其中,所述目标散列值生成单元,具体用于:
分别使用预设的多个从散列函数中的各个从散列函数,计算所述文本数据对应的从散列值;
将计算得到的各个从散列值合并在一起,生成目标散列值。
6.根据权利要求5所述的装置,其特征在于,所述目标散列值存储单元,具体用于:
判断内存中所述散列表入口地址处,是否存储有用于指向与所述散列表入口地址对应的单向链表的表头指针;
如果是,则在所述单向链表的队尾插入一个新节点,将所述目标散列值存储至所述新节点中的信息域;
如果否,则创建用于指向与所述散列表入口地址对应的单向链表的表头指针,存储至所述散列表入口地址处,并在所述内存中的所述表头指针指向的存储位置处,创建所述单向链表的第一个节点,将所述目标散列值存储至所述第一个节点中的信息域。
7.根据权利要求5-6中任一项所述的装置,其特征在于,所述主散列函数和所述从散列函数为BKDRHash函数、APHash函数、DJBHash函数、JSHash函数、RSHash函数、SDBMHash函数、PJWHash函数、ELFHash函数和DEKHash函数中两种不同的散列函数;
所述设定的映射算法为质数取余法、平方取中法或折叠法。
8.一种文本查找装置,其特征在于,包括:
文本数据获取单元,用于获取本次待查找的文本数据;
散列表入口地址确定单元,用于使用预设的主散列函数,计算所述文本数据对应的主散列值,并根据设定的映射算法确定所述主散列值对应的散列表入口地址;
目标散列值生成单元,用于使用预设的至少一个从散列函数,计算所述文本数据对应的从散列值,并基于所述从散列值得到目标散列值;
目标散列值查找单元,用于遍历内存中构建的散列表中与所述散列表入口地址对应的单向链表,查找所述单向链表中是否存在信息域包含有所述目标散列值的节点;
其中,所述目标散列值生成单元,具体用于:
分别使用预设的多个从散列函数中的各个从散列函数,计算所述文本数据对应的从散列值;
将计算得到的各个从散列值合并在一起,生成目标散列值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410856681.1A CN104572983B (zh) | 2014-12-31 | 2014-12-31 | 基于内存的散列表的构建方法、文本查找方法及相应装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410856681.1A CN104572983B (zh) | 2014-12-31 | 2014-12-31 | 基于内存的散列表的构建方法、文本查找方法及相应装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104572983A CN104572983A (zh) | 2015-04-29 |
CN104572983B true CN104572983B (zh) | 2018-03-06 |
Family
ID=53089045
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410856681.1A Active CN104572983B (zh) | 2014-12-31 | 2014-12-31 | 基于内存的散列表的构建方法、文本查找方法及相应装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104572983B (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9824092B2 (en) * | 2015-06-16 | 2017-11-21 | Microsoft Technology Licensing, Llc | File storage system including tiers |
CN108153757B (zh) * | 2016-12-02 | 2020-04-03 | 深圳市中兴微电子技术有限公司 | 一种哈希表管理的方法和装置 |
CN108664487B (zh) * | 2017-03-28 | 2021-12-14 | Tcl科技集团股份有限公司 | 一种散列表数据的写入、读取方法及系统 |
CN107291628B (zh) * | 2017-07-04 | 2020-09-01 | 北京京东尚科信息技术有限公司 | 访问数据存储设备的方法和装置 |
CN107728937B (zh) * | 2017-09-15 | 2020-09-04 | 上海交通大学 | 一种使用非易失性内存介质的键值对持久存储方法及系统 |
CN110399530A (zh) * | 2018-04-20 | 2019-11-01 | 杭州海康威视数字技术股份有限公司 | 数据匹配方法、装置及计算机设备 |
CN111045988B (zh) * | 2018-10-12 | 2023-06-16 | 伊姆西Ip控股有限责任公司 | 文件查找方法、设备和计算机程序产品 |
CN112818185A (zh) * | 2021-04-20 | 2021-05-18 | 芯启源(南京)半导体科技有限公司 | 一种基于sram的最长前缀匹配硬件系统查找的方法 |
CN113641872B (zh) * | 2021-10-18 | 2022-02-08 | 北京医百科技有限公司 | 一种散列方法、装置、设备及介质 |
CN113641871B (zh) * | 2021-10-18 | 2022-02-08 | 北京医百科技有限公司 | 一种无锁散列方法、装置、设备及介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1858734A (zh) * | 2005-12-28 | 2006-11-08 | 华为技术有限公司 | 一种数据存储及搜索方法 |
JP2007065811A (ja) * | 2005-08-30 | 2007-03-15 | Hitachi Ltd | 情報処理装置及び情報処理方法 |
CN101345694A (zh) * | 2007-07-11 | 2009-01-14 | 上海未来宽带技术及应用工程研究中心有限公司 | 一种快速查找定位和匹配访问控制列表的方法 |
CN101976322A (zh) * | 2010-11-11 | 2011-02-16 | 清华大学 | 基于一种完整性校验的安全元数据管理方法 |
CN102930185A (zh) * | 2012-11-28 | 2013-02-13 | 中国人民解放军国防科学技术大学 | 运行时程序安全关键数据的完整性验证方法及装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8386461B2 (en) * | 2008-06-16 | 2013-02-26 | Qualcomm Incorporated | Method and apparatus for generating hash mnemonics |
US9088491B2 (en) * | 2012-03-07 | 2015-07-21 | Citrix Systems, Inc. | Systems and methods for comparing configuration files and generating corrective commands |
-
2014
- 2014-12-31 CN CN201410856681.1A patent/CN104572983B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2007065811A (ja) * | 2005-08-30 | 2007-03-15 | Hitachi Ltd | 情報処理装置及び情報処理方法 |
CN1858734A (zh) * | 2005-12-28 | 2006-11-08 | 华为技术有限公司 | 一种数据存储及搜索方法 |
CN101345694A (zh) * | 2007-07-11 | 2009-01-14 | 上海未来宽带技术及应用工程研究中心有限公司 | 一种快速查找定位和匹配访问控制列表的方法 |
CN101976322A (zh) * | 2010-11-11 | 2011-02-16 | 清华大学 | 基于一种完整性校验的安全元数据管理方法 |
CN102930185A (zh) * | 2012-11-28 | 2013-02-13 | 中国人民解放军国防科学技术大学 | 运行时程序安全关键数据的完整性验证方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN104572983A (zh) | 2015-04-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104572983B (zh) | 基于内存的散列表的构建方法、文本查找方法及相应装置 | |
Cifariello et al. | Wiser: A semantic approach for expert finding in academia based on entity linking | |
US10659467B1 (en) | Distributed storage and distributed processing query statement reconstruction in accordance with a policy | |
CN101436192B (zh) | 用于优化针对垂直存储式数据库的查询的方法和设备 | |
CN105229980B (zh) | 利用可变关键字大小的精确匹配查找的方法及设备 | |
CN104866502B (zh) | 数据匹配的方法及装置 | |
CN101692651A (zh) | 一种哈希查找表的方法和装置 | |
TWI547814B (zh) | Data classification information storage methods and system structure | |
CN104239570B (zh) | 论文的搜索方法及装置 | |
CN102982095B (zh) | 一种基于叙词表的本体自动生成系统及其方法 | |
JP5960863B1 (ja) | 検索装置、検索方法、プログラム、及び記録媒体 | |
US20100057647A1 (en) | Accommodating learned clauses in reconfigurable hardware accelerator for boolean satisfiability solver | |
US20160335371A1 (en) | System and method for querying graphs distributed over multiple machines | |
US10496648B2 (en) | Systems and methods for searching multiple related tables | |
CN103226591B (zh) | 一种支持多关键字快速访问方法和装置 | |
CN107992480A (zh) | 一种实现实体消歧的方法、装置及存储介质、程序产品 | |
Zhang et al. | SUMMA: subgraph matching in massive graphs | |
CN110020272A (zh) | 缓存方法、装置以及计算机存储介质 | |
Nolé et al. | Processing Regular Path Queries on Giraph. | |
CN100484084C (zh) | 一种检索ip地址的方法 | |
Bustio-Martínez et al. | A novel multi-core algorithm for frequent itemsets mining in data streams | |
De Francisci et al. | Scaling out all pairs similarity search with mapreduce | |
CN109241098B (zh) | 一种分布式数据库的查询优化方法 | |
Xu et al. | Ontology based P2P semantic search routing algorithm | |
Peng et al. | Using partial evaluation in holistic subgraph search |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |