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

文档序号:8258855阅读:340来源:国知局
基于内存的散列表的构建方法、文本查找方法及相应装置的制造方法
【技术领域】
[0001 ] 本发明实施例涉及计算机技术领域,尤其涉及基于内存的散列表的构建方法、文件查找方法及相应装置。
【背景技术】
[0002]散列函数是一种从任何一种数据中创建小的数字“指纹”的方法,可以把任何一种数据(例如消息)压缩成摘要。所述摘要,也即散列值,其基本特性包括:如果两个散列值是不同的,那么对应的两个原始数据也是不同的(同一散列函数),如果两个散列值相同,那么两个原始数据可能相同,也可能不同;典型的散列函数都是无限定义域和有限的值域,一般散列值的长度比原始值长度要小。
[0003]散列表技术是散列函数的一个主要应用,常用于数据的快速查找,其基本思想把数据在散列表中的存储位置和该数据的散列值之间建立一种映射关系,散列值在这种映射关系下的像,就是相应记录在散列表中的存储位置。
[0004]在通常情况下,散列函数是一个压缩映像,因此无论如何设计散列函数,也无法完全避免散列冲突(即不同数据的散列值相同)的问题。而链地址法(开散列法)是一种常见的解决冲突的方法,其做法是将所有冲突的数据链接在同一个单向链表中,并将散列表定义为由B (表长)个单表头指针组成的指针数据F[0,I,….,B-1]。
[0005]链地址法本身是内存利用率比较高的一种处理冲突方法。若选择的散列函数能使同义词(散列值相同的不同数据)的个数等于散列表的平均长度:n/B(n为数据的个数),则查找定位的时间将是一个小常数(与单向链表F[i]的最大长度相关)。
[0006]目前,海量数据处理中常用到文本的查找定位。采用上述链地址法,在内存中构建用于查找海量文本的散列表的方案,虽然在一定程度上提高了内存利用率,但其提高效果并不是十分显著,依然会占用较多内存。

【发明内容】

[0007]本发明实施例提供基于内存的散列表的构建方法、文件查找方法及相应装置,以更好的提高内存利用率,更加节约内存。
[0008]一方面,本发明实施例提供了一种基于内存的散列表的构建方法,该方法包括:
[0009]获取用于查找的文本数据;
[0010]使用预设的主散列函数,计算所述文本数据对应的主散列值,并根据设定的映射算法确定所述主散列值对应的散列表入口地址;
[0011]使用预设的至少一个从散列函数,计算所述文本数据对应的从散列值,并基于所述从散列值得到目标散列值;
[0012]将所述目标散列值存储至内存中与所述散列表入口地址对应的单向链表,以构建散列表。
[0013]另一方面,本发明实施例还提供了一种文件查找方法,该方法包括:
[0014]获取本次待查找的文本数据;
[0015]使用预设的主散列函数,计算所述文本数据对应的主散列值,并根据设定的映射算法确定所述主散列值对应的散列表入口地址;
[0016]使用预设的至少一个从散列函数,计算所述文本数据对应的从散列值,并基于所述从散列值得到目标散列值;
[0017]遍历内存中构建的散列表中与所述散列表入口地址对应的单向链表,查找所述单向链表中是否存在信息域包含有所述目标散列值的节点。
[0018]再一方面,本发明实施例还提供了一种基于内存的散列表的构建装置,该装置包括:
[0019]文本数据获取单元,用于获取用于查找的文本数据;
[0020]散列表入口地址确定单元,用于使用预设的主散列函数,计算所述文本数据对应的主散列值,并根据设定的映射算法确定所述主散列值对应的散列表入口地址;
[0021]目标散列值生成单元,用于使用预设的至少一个从散列函数,计算所述文本数据对应的从散列值,并基于所述从散列值得到目标散列值;
[0022]目标散列值存储单元,用于将所述目标散列值存储至内存中与所述散列表入口地址对应的单向链表,以构建散列表。再一方面,本发明实施例还提供了一种文件查找装置,该装置包括:
[0023]文本数据获取单元,用于获取本次待查找的文本数据;
[0024]散列表入口地址确定单元,用于使用预设的主散列函数,计算所述文本数据对应的主散列值,并根据设定的映射算法确定所述主散列值对应的散列表入口地址;
[0025]目标散列值生成单元,用于使用预设的至少一个从散列函数,计算所述文本数据对应的从散列值,并基于所述从散列值得到目标散列值;
[0026]目标散列值查找单元,用于遍历内存中构建的散列表中与所述散列表入口地址对应的单向链表,查找所述单向链表中是否存在信息域包含有所述目标散列值的节点。
[0027]在本发明实施例中,在使用一种散列函数,计算得到文本数据对应的散列值,并对该散列值进行再散列得到散列表入口地址之后,并不是如传统的链地址法那样直接将文本数据本身存储至内存中该散列表入口地址对应的单向链表,而是使用另外一些散列函数计算文本数据对应的其他散列值,并基于得到的其他散列值生成目标散列值,进而将目标散列值存储至内存中该散列表入口地址对应的单向链表,以构建散列表。由于散列技术具备如下特性:通过散列函数得到的散列值的长度要小于文本数据的长度,因此本发明实施例提供的技术方案,不仅能够解决散列冲突的问题,而且所构建的散列表占用的内存更少,节约了内存资源。
【附图说明】
[0028]图1是本发明实施例一提供的一种基于内存的散列表的构建方法的流程示意图;
[0029]图2A是本发明实施例二提供的一种基于内存的散列表的构建方法的流程示意图;
[0030]图2B是本发明实施例二提供的一种在内存中构建的散列表的结构示意图;
[0031]图3是本发明实施例三提供的一种文本查找方法的流程示意图;
[0032]图4是本发明实施例四提供的一种文本查找方法的流程示意图;
[0033]图5是本发明实施例五提供的一种基于内存的散列表的构建装置的结构示意图;
[0034]图6是本发明实施例六提供的一种文本查找装置的结构示意图。
【具体实施方式】
[0035]下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
[0036]实施例一
[0037]图1是本发明实施例一提供的一种基于内存的散列表的构建方法的流程示意图。本实施例可适用于在内存中构建用于查找文本数据是否存在的散列表的情况。在本发明实施例中,所述文本数据可以是诸如微博评论等任何文本格式的数据。该方法可以由基于内存的散列表的构建装置来执行,所述装置可由软件和/或硬件实现。针对传统的链地址法在构建海量文本的散列表时会发生内存紧张的问题,本实施例通过多散列函数构建链地址法中的各个单链表,以达到进一步节省内存的目的。
[0038]参见图1,本实施例提供的基于内存的散列表的构建方法具体包括如下操作:
[0039]操作110、获取用于查找的文本数据。
[0040]操作120、使用预设的主散列函数,计算文本数据对应的主散列值,并根据设定的映射算法确定主散列值对应的散列表入口地址。
[0041]在本实施例中,可预先选择适合文本特征的散列函数,作为主散列函数。为尽可能达到均匀散列的目的,还可从备选的多个散列函数中通过测试挑选出均匀散列性能最优的散列函数,作为主散列函数,这样可以提升后续将主散列值映射到散列表入口地址过程的再散列效果。
[0042]示例性的,备选的多个散列函数可具体包括如下至少两个函数:BKDRHash函数、APHash 函数、DJBHash 函数、JSHash 函数、RSHash 函数、SDBMHash 函数、PJffHash 函数、ELFHash
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1