一种哈希表创建方法及系统、计算设备及存储介质与流程

文档序号:17926162发布日期:2019-06-15 00:25阅读:323来源:国知局
一种哈希表创建方法及系统、计算设备及存储介质与流程

本申请涉及计算机技术领域,特别涉及一种哈希表创建方法及系统、计算设备及存储介质。



背景技术:

哈希表也叫散列表,是根据关键码值而进行直接访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。散列函数能使对一个数据序列的访问过程更加有效,通过散列函数,数据元素将被更快地定位。

在java语言中,用一种方法创建一个目标字符串"aaa"时,jvm首先会去字符串池中查找是否存在"aaa"这个对象,如果不存在,则在字符串池中创建"aaa"这个对象,然后将池中"aaa"这个对象的引用地址返回给字符串常str,这样str会指向池中"aaa"这个字符串对象;如果存在,则不创建任何对象,直接将池中"aaa"这个对象的地址返回,赋给字符串常量。

字符串被用作其他对象的索引或对象本身,在引用过程中需要进行字符串比较,则采取将待比较字符串的所有组成字符逐一比较的方式来确定待比较的字符串是否相同,而字符串之间频繁的比较会对程序的性能有显著的负影响,通常的处理是将字符串哈希(hash),比较哈希值来判断字符串是否相等以提高比较性能,但哈希的方法会出现2个哈希值相等的字符串实际并不相同的情况,解决冲突的办法一般是使用哈希表,但在字符串对象较多的情况下,重新构建哈希表扩展的次数与消耗性能不容忽视。



技术实现要素:

有鉴于此,本说明书实施例提供了一种哈希表创建方法及系统、计算设备及存储介质,以解决现有技术中存在的技术缺陷。

一方面,本说明书实施例公开了一种哈希表创建方法,包括:

基于设定的哈希算法对目标字符串分别进行初始哈希运算,得到各目标字符串对应的初始哈希值;

确定目标字符串的数量m及存在冲突的初始哈希值的数量n,根据m和n确定目标字符串的初始哈希值的冲突率y,其中m和n为正整数;

根据所述初始哈希值的冲突率确定哈希算法的运算参数;

基于所述运算参数分别对目标字符串进行哈希运算,得到各目标字符串与运算参数对应的运算哈希值;

根据所述初始哈希值与所述运算哈希值构建树表示,并基于所述树表示创建对应的哈希表。

另一方面,本说明书实施例公开了一种数据查询方法,包括:

接收字符串地址查询请求,所述查询请求中携带有待查询的目标字符串;

基于设定的哈希算法及运算参数对所述待查询的目标字符串进行哈希运算,得到待查询的目标字符串的初始哈希值及运算哈希值;

获取创建完成的哈希表;

根据待查询的目标字符串的初始哈希值及运算哈希值对哈希表进行检索,确定所述待查询的目标字符串的存储地址。

另一方面,本说明书实施例公开了一种哈希表创建的装置,包括:

第一哈希运算模块,被配置为基于设定的哈希算法对目标字符串分别进行初始哈希运算,得到各目标字符串对应的初始哈希值;

第一处理模块,被配置为确定目标字符串的数量m及存在冲突的初始哈希值的数量n,根据目标字符串的数量m和存在冲突的初始哈希值的数量n确定目标字符串的初始哈希值的冲突率;

第二处理模块,被配置为根据所述初始哈希值的冲突率确定哈希算法的运算参数;

第二哈希运算模块,被配置为基于所述运算参数分别对目标字符串进行哈希运算,得到各目标字符串与运算参数对应的运算哈希值;

第三处理模块,被配置为根据所述初始哈希值与所述运算哈希值构建树表示,并基于所述树表示创建对应的哈希表。

另一方面,本说明书实施例公开了一种数据查询装置,包括:

接收模块,被配置为接收字符串地址查询请求,所述查询请求中携带有待查询的目标字符串;

第三哈希运算模块,被配置为基于设定的哈希算法及运算参数对待查询的目标字符串进行哈希运算,得到待查询的目标字符串的初始哈希值及运算哈希值;

获取模块,被配置为获取创建完成的哈希表;

确定模块,被配置为根据待查询的目标字符串的初始哈希值及运算哈希值对哈希表进行检索,确定所述待查询的目标字符串的存储地址。

另一方面,本说明书实施例公开了一种计算设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机指令,所述处理器执行所述指令时实现该指令被处理器执行时实现哈希表创建的方法或者数据查询方法的步骤。

另一方面,本说明书实施例公开了一种计算机可读存储介质,其存储有计算机指令,该指令被处理器执行哈希表创建的方法或者数据查询方法的步骤。

本说明书提供的一种哈希表扩建方法及装置,通过利用运算参数对目标字符串进行哈希运算,有利于减少目标字符串的哈希值冲突率,根据所述初始哈希值与所述运算哈希值构建树表示,并基于所述树表示创建对应的哈希表。通过利用树表示可以缩短字符串的查找时间,进而提高字符串存储过程的工作效率。利用所述树表示创建哈希表可以一次性完成,不需要每次新增/删除数据,反复重置哈希表,减小了昂贵的开销。

附图说明

图1是本说明书一实施例提供的一种计算设备的结构框图;

图2是本说明书一实施例提供的一种哈希表创建方法流程图;

图3是本说明书一实施例提供的一种哈希表创建方法流程图;

图4是本说明书一实施例提供的一种哈希表创建方法流程图;

图5是本说明书一实施例提供的一种红黑树示意图;

图6是本说明书一实施例提供的一种哈希表创建方法流程图;

图7是本说明书一实施例提供的一种哈希表示意图;

图8是本说明书一实施例提供的一种数据查询方法流程图;

图9是本说明书一实施例提供的一种哈希表示意图;

图10是本说明书一实施例提供的一种哈希表创建装置的结构示意图;

图11是本说明书一实施例提供的一种哈希表创建装置的结构示意图。

具体实施方式

在下面的描述中阐述了很多具体细节以便于充分理解本说明书。但是本说明书能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本说明书内涵的情况下做类似推广,因此本说明书不受下面公开的具体实施的限制。

在本说明书一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本说明书一个或多个实施例中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。

应当理解,尽管在本说明书一个或多个实施例中可能采用术语第一、第二等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一也可以被称为第二,类似地,第二也可以被称为第一。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

在本说明书中,提供了一种哈希表创建方法、装置、一种计算设备及存储介质,在下面的实施例中逐一进行详细说明。

图1是示出了根据本说明书一实施例的计算设备100的结构框图。该计算设备100的部件包括但不限于存储器110和处理器120。处理器120与存储器110通过总线130相连接。

计算设备100还包括接入设备140,接入设备140可以包括有线或无线的任何类型的网络接口(例如,网络接口卡(nic))中的一个或多个,诸如ieee802.11无线局域网(wlan)无线接口、全球微波互联接入(wi-max)接口、以太网接口、通用串行总线(usb)接口、蜂窝网络接口、蓝牙接口、近场通信(nfc)接口,等等。

在本说明书的一个实施例中,计算设备100的上述部件以及图1中未示出的其他部件也可以彼此相连接,例如通过总线。应当理解,图1所示的计算设备结构框图仅仅是出于示例的目的,而不是对本说明书范围的限制。本领域技术人员可以根据需要,增添或替换其他部件。

计算设备100可以是任何类型的静止或移动计算设备,包括移动计算机或移动计算设备(例如,平板计算机、个人数字助理、膝上型计算机、笔记本计算机、上网本等)、移动电话(例如,智能手机)、可佩戴的计算设备(例如,智能手表、智能眼镜等)或其他类型的移动设备,或者诸如台式计算机或pc的静止计算设备。计算设备100还可以是移动式或静止式的服务器。

其中,处理器120可以执行图2所示方法中的步骤。图2示出了根据本说明书一实施例提供的一种哈希表创建方法流程图,哈希表创建方法可以包括步骤202至步骤210。

步骤202、基于设定的哈希算法对目标字符串分别进行初始哈希运算,得到各目标字符串对应的初始哈希值。

本说明书一个或多个实施例中,基于设定的哈希算法,对目标字符串分别进行初始哈希运算,初始哈希运算中的运算参数值等于0,得到各目标字符串对应的初始哈希值。

步骤204、确定目标字符串的数量m及存在冲突的初始哈希值的数量n,根据m和n确定各目标字符串的初始哈希值的冲突率y,其中m和n为正整数。

本说明书一个或多个实施例中,若存在两个字符串不同,但是初始哈希值相同、这两个字符串的初始哈希值冲突就存在冲突。

例如shash(“abcdef”,0)=1111,shash(“uvwxyz”,0)=1111。

shash(“abcdef”,0)表示对字符串“abcdef”做运算参数值为0的初始哈希运算。shash(“uvwxyz”,0)表示对字符串“uvwxyz”做运算参数值为0的初始哈希运算。从上述运算结果来看,字符串“abcdef”和字符串“uvwxyz”的初始哈希值相同,存在冲突。

记所有目标字符串的数量为m、存在哈希值冲突的字符串数量为n,则利用公式y=m/n,即可得到目标字符串的初始哈希值的冲突率y。

仍以上述例子说明,若目标字符串数量为10000,仅有字符串“abcdef”和字符串“uvwxyz”的初始哈希值相同,存在冲突,那么这组目标字符串的初始哈希值的冲突率y=2/10000=0.00002。

步骤206、根据所述初始哈希值的冲突率确定哈希算法的运算参数。

通过改变哈希运算的运算参数,可以极大地减小不同的字符串的哈希值发生冲突的概率。

本说明书一个或多个实施例中,步骤206可以通过如图3所示的步骤实现,包括步骤302至步骤306。

步骤302:设置哈希值冲突率的容忍度阈值p。

步骤304:根据所述容忍度阈值p和目标字符串的初始哈希值的冲突率y确定运算参数的个数n,n为正整数。

本说明书一个或多个实施例中,当运算参数值为0时,m个目标字符串中存在哈希值冲突的字符串数量为n,每一个字符串与其他字符串发生冲突的冲突率为y;改变运算参数值,m个目标字符串中存在哈希值冲突的字符串数量也是n,因此冲突率仍然为y;通过以不同的运算参数值对相同的字符串进行重复哈希运算,m个目标字符串的冲突率降为y^2,同理,经过n次运算参数哈希运算后,m个目标字符串的冲突率降为y^(n+1),当字符串的冲突率达到容忍度阈值p时,计算满足y^(n+1)小于等于p的n的最小值,即可得出所需的非零运算参数为n个。

步骤306:选取n个不相等的正整数作为哈希算法的运算参数。

本说明书一个实施例中,以目标字符串总量为500000个,容忍度阈值为10^(-12)为例进行说明,具体过程如下:基于设定的哈希算法对500000个目标字符串分别以运算参数为0进行初始哈希运算后,得到各个字符串对应的初始哈希值,对所有初始哈希值进行比较,比较结果为出现哈希值冲突的字符串数量为24个,因此对于任意一个字符串而言,会与其他字符串发生冲突的概率为24/500000=0.000048。运算参数值为0时,冲突率为0.000048,将此值记为y,当运算参数值设置其他数值时,出现哈希值冲突的字符串数量也是24,因此冲突率仍然为0.000048,经过一次运算参数不为0的哈希运算后,500000个字符串的冲突率降为y^2,同理,经过n次运算参数不为0的哈希运算后,500000个字符串的冲突率降为y^(n+1),当字符串的冲突率达到容忍度阈值10^(-12)时,计算满足y^(n+1)小于等于10^(-12)的n的最小值为2,即所需的运算参数为2个,任意取2个不相等的正整数作为哈希算法的运算参数即可。

本说明书一个或多个实施例中,通过选取不同的运算参数进行哈希运算,可以有效地降低目标字符串的哈希值冲突率。

步骤208、基于所述运算参数分别对目标字符串进行哈希运算,得到目标字符串与运算参数对应的运算哈希值。

本说明书一个或多个实施例中,基于每个运算参数对目标字符串进行哈希运算,得到目标字符串与所述运算参数对应的运算哈希值。

步骤210、根据所述初始哈希值与所述运算哈希值构建树表示,并基于所述树表示创建对应的哈希表。

本说明书一个或多个实施例中,构建的所述树表示可以是红黑树。

红黑树处于空状态时,树中的根节点和所述根节点的子节点均为空节点。将所述目标字符串的哈希值作为关键字,字符串的首地址作为键值构建红黑树,在红黑树构建过程中,为了维护红黑树的平衡性,会对树的节点进行颜色变换和旋转操作。当所述树表示构建完成后,完成一次所述树表示的遍历,根据遍历得到的所述树表示中各节点的信息创建哈希表。

本说明书一个或多个实施例中,红黑树是一个自平衡二叉查找树,平衡二叉树的最小高度和最大高度的差值的绝对值不超过1,因此,仍以500000个目标字符串为例,在将500000个字符串的哈希值及其字符串首地址均插入到所述红黑树中时,即表示完成了红黑树的构建,由于2^18<500000<2^19,所以该500000个字符串的哈希值对应的红黑树树高度不会超过20层。在红黑树构建构成中,通过不会超过20次的查找即可判断字符串是否已经添加至红黑树中。通过利用红黑树可以缩短字符串的查找时间,进而提高字符串存储过程的工作效率。

图4示出了根据本说明书一实施例提供的一种哈希表创建方法的流程图,包括步骤402至步骤420。

步骤402、根据目标字符串的初始哈希值为索引在第i个树表示中查找与所述索引对应的节点,i∈[1,n+1],n表示运算参数的总数,i和n均为正整数。

实际应用中,i从1开始取值。

步骤404、判断是否在第i个树表示中查找到对应的节点,若是,则执行步骤408,若否,则执行步骤406。

本说明书一个或多个实施例中,若在第i个树表示中未查找到对应的节点,则执行步骤406,若在第i个树表示中查找到相应的节点,则执行步骤408。

步骤406、以所述初始哈希值和运算哈希值为关键字创建节点,并将所述字符串的首地址添加到所创建节点的节点值中。

步骤408、i的值增加1,判断i是否大于n+1,若是,则执行步骤410,若否,则执行步骤402。

本说明书一个或多个实施例中,若在第i个树表示中查找到相应的节点,则不能再次将所述初始哈希值和运算哈希值作为关键字插入所述第i个树表示中,需要在第i=i+1个树表示中查找是否存在与目标字符串的初始哈希值和运算哈希值相应的节点。若i小于等于n+1,则执行步骤402,若i大于n+1,则执行步骤410。

步骤410、树表示的构建过程结束。

本说明书一个实施例中,以字符串“abcdef”和字符串“uvwxyz”、运算参数为1和2为例进行说明,具体过程如下:此时,n=2,存在3个树表示分别记为树表示1,树表示2和树表示3。各个字符串的哈希值如下所示:

shash(“abcdef”,0)=1111,shash(“uvwxyz”,0)=1111

shash(“abcdef”,1)=4321,shash(“uvwxyz”,1)=1234

shash(“abcdef”,2)=7890,shash(“uvwxyz”,2)=0987

首先以字符串“abcdef”的初始哈希值作为索引,在树表示1中查找是否存在与1111、4321和7890对应的节点,未查找到对应的节点则以1111、4321和7890为关键字在树表示1中创建节点,并将所述字符串的首地址添加到所创建节点的节点值中,如图5所示,假设在树表示1的节点2以字符串“abcdef”的三个哈希值作为关键字插入节点2中,树表示1的节点1中已经插入字符串“mnopq”的三个哈希值6543、6789和4357,插入后的树表示1如图所示,字符串“abcdef”的哈希值插入完成。

图5中的树节点中的1、2、3仅表示节点序号,不表示存储内容,本实施例以3个节点为例进行说明,实际应用中所述树表示中的节点可以为多个。没有插入内容的节点以节点序号表示,插入了内容的节点以哈希值表示。如图5中,树表示3为空,树表示1的节点2中存储了哈希值1111、4321和7890,树表示2的节点2存储了哈希值1111、1234和0987。

当以字符串“uvwxyz”的初始哈希值作为索引,在树表示1中查找是否存在与所述哈希值1111、1234和0987相应的节点,字符串“uvwxyz”与字符串“abcdef”的初始哈希值相等,出现冲突,所述索引指向树表示2,但是仍指向树表示2中的节点2,在树表示2的节点2中进行查找是否存在与所述哈希值1111、1234和0987对应的节点,在节点2中未查找到对应的节点,则将字符串“uvwxyz”的哈希值1111、1234和0987作为关键字插入节点2中,插入后的初始树表示如图5所示。

本说明书一个或多个实施例中,将通过不同运算参数对目标字符串进行哈希运算得到的哈希值作为关键字插入树节点中,并且在插入过程中先在树表示中进行查找是否存在与所述哈希值对应的节点,可以避免插入存在冲突的哈希值,同时树表示的构建也为哈希表的创建提供了方便。

图6示出了根据本说明书一实施例提供的一种哈希表创建方法的流程图,包括步骤602至步骤606。

步骤602、根据所述目标字符串的初始哈希值确定哈希表项索引。

本说明书一个或多个实施例中,哈希表项索引值为目标字符串的初始哈希值除以哈希表的长度所得的值。

步骤604、根据所述哈希表项索引从所述第i个哈希表中查询对应的哈希表项h,作为当前哈希表项,i∈[1,n+1],h∈[1,l],l表示哈希表的长度,n为运算参数的总数,i、l和h均为正整数。

实际应用中,i从1开始取值,l为哈希值的长度,n为运算参数的个数,h为哈希表项,i、n、h和l均为正整数。

步骤606、判断所述哈希表项内容h是否为空,若是,则执行步骤608,若否,则执行步骤610。

本说明书一个或多个实施例中,当所述哈希表项的表项内容为空时,则执行步骤608,当所述当前哈希表项的表项内容不为空时,则执行步骤610。

步骤608、将所述第i个树表示节点中目标字符串的初始哈希值、运算哈希值和字符串首地址添加到当前哈希表项的表项中。

步骤610、从所述第i个哈希表中查询对应的哈希表项h=h+1,作为当前哈希表项,执行步骤606。

本说明书一个实施例中,以图5的树表示1为例进行说明,参见图7,具体过程如下:

首先以字符串“abcdef”的初始哈希值除以哈希表的长度所得的值作为索引,在哈希表1中查找所述索引对应的哈希表项内容是否为空,假设所述索引指向哈希表1中的001项,001项内容为空,则将字符串“abcdef”的初始哈希值、运算哈希值及字符串首地址存入001项。然后以字符串“mnopq”的初始哈希值作为索引,在哈希表1中查找所述索引对应的哈希表项内容是否为空,字符串“mnopq”的初始哈希值为6543,运算哈希值为6789和4357,假设所述索引指向哈希表1中的002项,002项内容为空,则将字符串“mnopq”的初始哈希值、运算哈希值及字符串首地址存入002项。存储结果如图7所示。

本实施例仅以一个树表示为例进行说明,不构成对本申请实施例的显示,实际使用的树表示个数根据实际情况确定。

本说明书一个或多个实施例中,基于所述红黑树创建哈希表,创建过程实质为一次红黑树的遍历及数据填充过程,而不需要每次新增/删除数据,反复重置哈希表,减小了昂贵的开销。

图8示出了根据本说明书一实施例提供的一种数据查询方法的流程图,包括步骤802至步骤812。

步骤802、接收字符串地址查询请求,所述查询请求中携带有待查询的目标字符串。

步骤804、基于设定的哈希算法及运算参数对所述待查询的目标字符串进行哈希运算,得到待查询的目标字符串的初始哈希值及运算哈希值。

本说明书一个或多个实施例中,所述设定的哈希算法与所述对目标字符串进行哈希运算所用的哈希算法一致,所述运算参数的个数及数值也与所述对目标字符串进行哈希运算所用的的运算参数的个数及数值一致。

步骤806、获取创建完成的哈希表。

本说明书一个或多个实施例中,所述哈希表为一段连续的内存,获取哈希表的方法实际为n+1次内存拷贝。

步骤808、根据待查询的目标字符串的初始哈希值及运算哈希值对哈希表进行检索,确定所述待查询的目标字符串的存储地址。

本说明书一个或多个实施例中,比较待查询的目标字符串的初始哈希值和运算哈希值与第i个哈希表对应的哈希表项中的哈希值是否相等,i∈[1,n+1],n表示运算参数的总数,i和n均为正整数;

若相等,则将第i个哈希表中对应的哈希表项内容的的字符串首地址作为所述待查询的目标字符串的存储地址返回以响应所述查询请求;

若不相等,则i的值增加1,判断i与n+1的大小关系;

若i小于等于n+1,则继续比较待查询的目标字符串的初始哈希值和运算哈希值与第i个哈希表对应的哈希表项中的哈希值是否相等的步骤。

实际应用中,i从1开始取值。

以500000个字符串为例,所需运算参数为2个,假设运算参数分别为1和2,生成3个哈希表,如图9所示,待查询的目标字符串“uvwxyz”经过运算参数为1和2的哈希运算后得到的哈希结果为4321和7890,初始哈希运算得到的哈希结果为1111,利用1111除以表的长度所得的结果001作为哈希表项索引在所述哈希表1中查找对应的哈希表项内容。将哈希值1111、1234和0987与哈希表1中对应的001项内容中的哈希值进行比较,比较结果不相等,则哈希值1111、1234和0987与哈希表2中对应的001项内容中的哈希值进行比较;比较结果相等,则将哈希表2中001项内容中的字符串首地址返回。

本说明书一个或多个实施例中,查询哈希表(一段连续内存)也只是消耗n+1次内存拷贝时间极快,哈希表只进行一次创建,而不需要每次新增或删除数据就重置哈希表,减小了昂贵的开销。

本说明书一实施例还提供一种哈希表创建的装置,如图10所示,包括第一哈希运算模块1002、第一处理模块1004、第二处理模块1006和第二哈希运算模块1008、第三处理模块1010和第四处理模块1012。

第一哈希运算模块1002,被配置为基于设定的哈希算法对目标字符串分别进行初始哈希运算,得到各目标字符串对应的初始哈希值;

本说明书一个或多个实施例中,第一哈希运算模块还被配置为基于设定的哈希算法,以运算参数值等于0对目标字符串分别进行哈希运算,得到各目标字符串对应的运算参数值等于0的初始哈希值。

第一处理模块1004,被配置为确定目标字符串的数量m及存在冲突的初始哈希值的数量n,根据目标字符串的数量m和存在冲突的初始哈希值的数量n确定目标字符串的初始哈希值的冲突率;

本说明书一个或多个实施例中,第一处理模块还被配置为若存在两个字符串的初始哈希值相同、字符串内容不同,则所述两个字符串存在初始哈希值冲突,记所有目标字符串的数量为m、存在哈希值冲突的字符串数量为n,则利用公式y=m/n,即可得到目标字符串的初始哈希值的冲突率y。

第二处理模块1006,被配置为根据所述初始哈希值的冲突率确定哈希算法的运算参数;

第二哈希运算模块1008,被配置为基于所述运算参数分别对目标字符串进行哈希运算,得到各目标字符串与运算参数对应的运算哈希值;

本说明书一个或多个实施例中,第二哈希运算模块还被配置为基于每个运算参数对目标字符串进行哈希运算,得到目标字符串与所述运算参数对应的运算哈希值。

第三处理模块1010,被配置为根据所述初始哈希值与所述运算哈希值构建树表示,并基于所述树表示创建对应的哈希表。

本说明书一个或多个实施例中,红黑树是一个自平衡二叉查找树,平衡二叉树的最小高度和最大高度的绝对值不超过1,利用红黑树可以缩短字符串的查找时间,进而提高工作效率。利用红黑树创建哈希表也可以一次性完成,不需要每次新增/删除数据,反复重置哈希表,减小了昂贵的开销。

本说明书一实施例还提供一种数据查询装置,如图11所示,包括接收模块1102、第三哈希运算模块1104、获取模块1106和确定模块1108。

接收模块1102,被配置为接收字符串地址查询请求,所述查询请求中携带有待查询的目标字符串;

第三哈希运算模块1104,被配置为基于设定的哈希算法及运算参数对待查询的目标字符串进行哈希运算,得到待查询的目标字符串的初始哈希值及运算哈希值;

本说明书一个或多个实施例中,所述设定的哈希算法与所述对目标字符串进行哈希运算所用的哈希算法一致,所述运算参数的个数及数值也与所述对目标字符串进行哈希运算所用的的运算参数的个数及数值一致。

获取模块1106,被配置为获取创建完成的哈希表;

本说明书一个或多个实施例中,所述哈希表为一段连续的内存,获取哈希表的方法实际为n+1次内存拷贝。

确定模块1108,被配置为根据待查询的目标字符串的初始哈希值及运算哈希值对哈希表进行检索,确定所述待查询的目标字符串的存储地址。

本说明书一个或多个实施例中,确定模块还被配置为比较待查询的目标字符串的初始哈希值和运算哈希值与第i个哈希表对应的哈希表项中的哈希值是否相等,i∈[1,n+1],n表示运算参数的总数,i和n均为正整数;

若相等,则将第i个哈希表中对应的哈希表项内容的的字符串首地址作为所述待查询的目标字符串的存储地址返回以响应所述查询请求;

若不相等,则i的值增加1,判断i与n+1的大小关系;

若i小于等于n+1,则比较待查询的目标字符串的初始哈希值和运算哈希值与第i个哈希表对应的哈希表项中的哈希值是否相等的步骤。

实际应用中,i从1开始取值。

本说明书一个或多个实施例中,哈希算法用于把任意长度的输入变换成指定长度的输出,该输出就是哈希值。哈希表是一种根据关键字直接访问内存存储位置的数据结构,利用所述树表示创建哈希表可以一次性完成,不需要每次新增/删除数据,反复重置哈希表,减小了昂贵的开销。

本申请一实施例还提供一种计算设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机指令,所述处理器执行所述指令时实现如前所述哈希表扩建方法的步骤。本申请一实施例还提供一种计算机可读存储介质,其存储有计算机指令,该指令被处理器执行时实现如前所述哈希表扩建方法的步骤。

说明书上述为本实施例的一种计算机可读存储介质的示意性方案。需要说明的是,该存储介质的技术方案与上述的哈希表扩建方法的技术方案属于同一构思,存储介质的技术方案未详细描述的细节内容,均可以参见上述哈希表扩建方法的技术方案的描述。

所述计算机指令包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。

需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本说明书并不受所描述的动作顺序的限制,因为依据本说明书,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本说明书所必须的。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。

以上公开的本说明书优选实施例只是用于帮助阐述本说明书。可选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本说明书的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本申请的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本申请。本说明书仅受权利要求书及其全部范围和等效物的限制。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1