一种构造完美哈希的方法与流程

文档序号:14940975发布日期:2018-07-13 20:46阅读:312来源:国知局

本发明涉及数据处理技术领域,更具体的说,是涉及一种构造完美哈希的方法。



背景技术:

hash,即哈希,又称散列,可以看作是一个函数。函数的输入为原始数据,输出一般为整数。

哈希的用途,主要是为了快速查找。例如:假设原始数据为一个字符串的集合set={si},i取值为1~n,即该集合中共有n个元素。现有一个待查字符串s,需要确定s是否存在于集合set中。最原始的办法是将s与set中所有元素逐一比较,则平均情况下,需要n/2次比较,最坏情况下需要n次比较。完成查找的时间复杂度为o(n),即时间与集合的长度成正比。

对字符串数据,一个简单的hash函数是将字符串中所有字符的ascii码累加求和,再对一个常数取模。常数一般是字符串集合的长度,即n。

设有hash函数,完成如图1所示的哈希映射,则可以事先对集合中所有数据进行hash映射,并记录结果为如图2所示的哈希映射表。查找时,先计算hash(s),得到哈希值,再与该哈希值对应的数据进行比较。例如,hash(s)计算得到4,则进一步比较s与s10,如果相等,则表明s位于集合中;如果不等,则表明s不在集合中。

上述的示例中,实际是一个完美哈希。完美哈希是指无冲突的哈希,即哈希映射表中所有的哈希值,最多只有一个字符串与之对应。如图3所示,简单的哈希函数一般有冲突。这种情况下,构造的哈希映射表如图4所示。在有冲突的情况下,查找流程为:首先计算待查字符串s的哈希值hash(s),如果哈希表中,没有任何字符串与该值对应,则表明s不在集合中;如果哈希表中,有字符串与该值对应,需要进一步将s与该值对应的所有字符串逐一比较。如果有相同的字符串,则表明s在集中。如果该值对应的所有字符串,都不同,则表明s不在集合中。例如,hash(s)为2,查哈希表、,2没有任何字符串映射,则s不在集合中。再如,hash(s)为5,查哈希表,5对应的字符串有三个,分别是s2,s7,s10,则需要进一步将s与s2,s7,s10比较。如果有一个相同,则表明s在集合中。如果s与s2,s7,s10都不同,则表明s不在集合中。

可见,冲突会导致查找过程中需要进行更多次数的比较。因此,如何构造完美哈希,使得查找过程更加迅速,查找效率更高,成为行业领域内技术人员研究的热题。



技术实现要素:

有鉴于此,本发明提供了一种构造完美哈希的方法,以提升数据查找速度,提高数据查找效率。

一种构造完美哈希的方法,包括:

构建并训练神经网络模型;训练好的神经网络模型的输出结果满足预设条件;所述神经网络模型包括多个输入节点,一个输出节点;每一个输入值为一个属性,每一个属性具有一个权重值;

将包括多个数据样本的待处理数据集代入所述神经网络模型,得到多个输出值,所述多个数据样本的数量和所述多个输出值的数量相同;

确定所述待处理数据集中所有数据样本到输出值的映射关系,并记录输出值对应的数据样本,生成完美哈希表。

可选的,所述构建并训练神经网络模型,包括:

根据训练数据集中的数据样本构建神经网络模型;

将所述训练数据集代入所述神经网络模型,不断调整各个属性的权重值,直至所述训练数据集中的所有数据样本的输出值满足预设条件,所述权重值的个数与所述神经网络模型的输入节点个数相同。

可选的,所述数据样本为字符串,则所述根据数据集中的数据样本构建神经网络模型,包括:

将所述训练数据集中长度最大的字符串的长度确定为输入节点的个数,并构建神经网络模型。

可选的,所述预设条件为所有数据样本的输出值的差值大于或等于1,所述训练数据集中包括n个数据样本,则所述将所述训练数据集代入所述神经网络模型,不断调整各个属性的权重值直至所述训练数据集中的所有的数据样本的输出值满足预设条件,包括:

分别将n个字符串输入所述神经网络模型,得到n个输出值;

若所述n个输出值中存在差值小于1的两个输出值,则调整权重值,进入所述分别将n个字符串输入所述神经网络模型,得到n个输出值的步骤,直至所述n个输出值中的任意两个输出值的差值大于或等于1。

可选的,所述分别将n个字符串输入所述神经网络模型,得到n个输出值,包括:

针对每一个字符串:将字符串中的每一个字符作为一个属性值,依次输入神经网络模型的输入节点;

若存在字符串长度小于所述神经网络模型输入节点个数的情况,将不存在字符位置对应的输入节点的属性值设为0;

得到n个输出值。

可选的,所述待处理数据集中包括h个数据样本,所述h为正整数;则所述确定所述待处理数据集中所有数据样本到输出值的映射关系,并记录输出值对应的数据样本,生成完美哈希表,包括:

将所述待处理数据集中的h个数据样本映射到1~k中的h个整数,所述h个整数即为h个输出值,其中,k是所述h个输出值的跨度,为正整数且大于h;

将1-k中的所有整数标记为有效值和无效值,其中有效值为映射结果对应的整数,且个数为h,依次标记为1-h;无效值为非映射结果整数,标记为-1;

确定每一个有效值对应的样本数据,生成完美哈希表。

可选的,所述将所述待处理数据集中的h个数据样本映射到1-k中的h个整数,包括:

将h个数据样本的h个输出值进行取整处理;

将经过取整处理后的h个输出值按照大小进行排序;

将h个输出值分别减去最小的输出值;

确定h个数据样本到减去最小的输出值后的数值的映射关系。

一种构造完美哈希的装置,包括:

模型处理模块,用于构建并训练神经网络模型;训练好的神经网络模型的输出结果满足预设条件;所述神经网络模型包括多个输入节点,一个输出节点;每一个输入值为一个属性,每一个属性具有一个权重值;

样本映射模块,用于将包括多个数据样本的待处理数据集代入所述神经网络模型,得到多个输出值,所述多个数据样本的数量和所述多个输出值的数量相同;

哈希表生成模块,用于确定所述待处理数据集中所有数据样本到输出值的映射关系,并记录输出值对应的数据样本,生成完美哈希表。

可选的,所述模型处理模块包括:

模型构建模块,用于根据训练数据集中的数据样本构建神经网络模型;

模型训练模块,用于将所述训练数据集代入所述神经网络模型,不断调整各个属性的权重值,直至所述训练数据集中的所有数据样本的输出值满足预设条件,所述权重值的个数与所述神经网络模型的输入节点个数相同。

可选的,所述数据样本为字符串,则所述模型构建模块具体用于:将所述训练数据集中长度最大的字符串的长度确定为输入节点的个数,并构建神经网络模型。

可选的,所述预设条件为所有数据样本的输出值的差值大于或等于1,则所述模型训练模块包括:

样本代入模块,用于分别将n个字符串输入所述神经网络模型,得到n个输出值;

权重调整模块,用于在所述n个输出值中存在差值小于1的两个输出值的情况下,调整权重值。

可选的,所述样本代入模块包括:

属性值输入模块,用于针对每一个字符串:将字符串中的每一个字符作为一个属性值,依次输入神经网络模型的输入节点;

字符串处理模块,用于在存在字符串长度小于所述神经网络模型输入节点个数的情况时,将不存在字符位置对应的输入节点的属性值设为0;

输出值确定模块,用于得到n个输出值。

可选的,所述待处理数据集中包括h个数据样本,所述h为正整数;则所述哈希表生成模块包括:

第一处理模块,用于将所述待处理数据集中的h个数据样本映射到1~k中的h个整数,所述h个整数即为h个输出值,其中,k是所述h个输出值的跨度,为正整数且大于h;

第二处理模块,用于将1-k中的所有整数标记为有效值和无效值,其中有效值为映射结果对应的整数,且个数为h,依次标记为1-h;无效值为非映射结果整数,标记为-1;

第三处理模块,用于确定每一个有效值对应的样本数据,生成完美哈希表。

可选的,所述第一处理模块包括:

取整处理模块,用于将h个数据样本的h个输出值进行取整处理;

排序处理模块,用于将经过取整处理后的h个输出值按照大小进行排序;

减值处理模块,用于将h个输出值分别减去最小的输出值;

映射关系确定模块,用于确定h个数据样本到减去最小的输出值后的数值的映射关系。

本发明实施例公开了一种构造完美哈希的方法及装置,方法包括:构建并训练神经网络模型,训练好的神经网络模型的输出结果满足预设条件,将包括多个数据样本的待处理数据集代入所述神经网络模型,得到与所述多个数据样本数量相同的多个输出值,确定所述待处理数据集中所有数据样本到输出值的映射关系,并记录输出值对应的数据样本,生成完美哈希表。所述构造完美哈希的方法及装置,采用神经网络模型进行数据样本的一次映射,并保证每个数据样本的映射结果不同,即不同的映射结果只有唯一的数据样本与其对应,因此在查找确定哈希值的数据时,只需要进行一次数据比较,从而查找速度快,查找效率更高。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为第一哈希映射示意图;

图2为图1所示哈希映射的哈希映射表;

图3为第二哈希映射示意图;

图4为图3所示哈希映射的哈希映射表;

图5为本发明实施例公开的构造完美哈希的方法的流程图;

图6为神经网络的结构示意图;

图7为本发明实施例公开的生成完美哈希表的流程图;

图8为本发明实施例公开的数据样本映射示意图;

图9为本发明实施例公开的二级映射表示意图;

图10为本发明实施例公开的三级映射表示意图;

图11为本发明实施例公开的完美哈希映射表;

图12为本发明实施例公开的第一种构建并训练神经网络模型的流程图;

图13为本发明实施例公开的第二种构建并训练神经网络模型的流程图;

图14为本发明实施例公开的构造完美哈希的装置的结构示意图;

图15为本发明实施例公开的哈希表生成模块的结构示意图;

图16为本发明实施例公开的第一种模型处理模块的结构示意图;

图17为本发明实施例公开的第二种模型处理模块的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

图5为本发明实施例公开的构造完美哈希的方法的流程图,参见图5所示,所述方法可以包括:

步骤501:构建并训练神经网络模型。

其中,训练好的神经网络模型的输出结果满足预设条件,所述预设条件可以是:多个输出结果中,任意两个输出结果的差值大于等于1。所述神经网络模型包括多个输入节点,一个输出节点。每一个输入值为一个属性,每一个属性具有一个权重值。可参见图6理解神经网络模型,图6为神经网络的结构示意图,其中x1、x2、x3、x4为输入,是一个数据样本的属性值,w1、w2、w3、w4为各属性的权重值。y是输出,y的计算公式是y=w1*x1+w2*x2+w3*x3+w4*x4。

步骤502:将包括多个数据样本的待处理数据集代入所述神经网络模型,得到多个输出值。

其中,所述多个数据样本的数量和所述多个输出值的数量相同。这样,一个数据样本经过所述神经网络模型的映射后,输出一个对应的输出值,保证一个确定的输出值仅对应唯一的一个数据样本,从而保证完美哈希的实现。

步骤503:确定所述待处理数据集中所有数据样本到输出值的映射关系,并记录输出值对应的数据样本,生成完美哈希表。

在分别对所述待处理训练集中的所有数据样本进行神经网络映射后,得到对应的多个输出值,为了便于后续查找,可以根据数据样本与输出值的映射对应关系,生成完美哈希表,以供后续查找某数据是否在所述待处理训练集中。

图7为本发明实施例公开的生成完美哈希表的流程图。本实施例中,所述待处理数据集中包括h各数据样本,所述h为正整数。参见图7所示,所述确定所述待处理数据集中所有数据样本到输出值的映射关系,并记录输出值对应的数据样本,生成完美哈希表,可以包括:

步骤701:将所述待处理数据集中的h个数据样本映射到1~k中的h个整数。

其中,所述h个整数即为h个输出值,k是所述h个输出值的跨度,为正整数且大于h。

步骤701具体可以包括:将h个数据样本的h个输出值进行取整处理;将经过取整处理后的h个输出值按照大小进行排序;将h个输出值分别减去最小的输出值;确定h个数据样本到减去最小的输出值后的数值的映射关系。

根据上述内容,已经训练好的神经网络模型,代入x并取整后,y值均为整数,但一般不连续。本实施例中,可以对y进行调整,即:对y进行排序;取最小值,最大值;对y中每一个元素,减去最小值;调整后,y的起始值为0。

y的跨度(即最大值减最小值),一般大于数据集中数据个数n,设为k。

这样,神经网将模型将待处理数据集中的n个数据样本,无冲突地映射到1~k中n个整数。可参见图8,图8为本发明实施例公开的数据样本映射示意图。

步骤702:将1-k中的所有整数标记为有效值和无效值。

其中有效值为映射结果对应的整数,且个数为h,依次标记为1-h;无效值为非映射结果整数,标记为-1。

为了使映射的结果唯一的对应于1~n之间一个数值,在前述数据样本映射完成的基础上,可以再设置二级映射。

建立一个二级映射表,包含k个元素;从1~k检查,如果有对应数据映射,则依次设为1~n中数值。如果没有对应的数据映射,则设为-1。图9为本发明实施例公开的二级映射表示意图,可结合图9理解上述内容。

步骤703:确定每一个有效值对应的样本数据,生成完美哈希表。

图10为本发明实施例公开的三级映射表示意图,结合图10所示,进一步的,本发明实施例还可以设置三级映射表,记录哈希值,即神经网络模型的输出值与数据样本的对应关系。这样,生成如图11所示的,记录有数据样本与哈希值的映射关系以及对应关系的完整的完美哈希表。

基于如图11所示的完美哈希表的数据查找的一个具体实现可以包括:设待查找的字符串为s,首先按上述规则,对s进行向量化,得到向量表示sx;再将sx代入神经网络模型,求第一级映射结果sy,sy=w*sx;再查找二级映射表,查最终映射结果;如果二级映射结果为-1,则表明s不在集合中;如果二级映射结果为有效值,则进一步查找该哈希值对应的字符串s’,再比较s与s’,检查是否相等。如果相等,表明s在集合中;如果不相等,则表明s不在集合中。

根据上述内容,本实施例中,一次查找,需要做三级映射。第一级映射,是基于神经网络模型实现。对于已经训练好的神经网络模型,该映射实际是一个函数:y=wx。该函数实现过程时间复杂度为o(1),即与集合本身的大小无关。第二级映射是从1~k到1~n的映射,实现基于定长数组,时间复杂度为o(1)。第三级映射也是数组元素的字位,时间复杂度是o(1)。而最后一步样本数据的比较,是任何哈希实现都必须要做的。

完美哈希保证了每一个哈希值最多只对应一个数据样本,因此最后一步数据样本的比较,只需要与一个数据样本进行比较,简单快速。

本实施例中,所述构造完美哈希的方法,采用神经网络模型进行数据样本的一次映射,并保证每个数据样本的映射结果不同,即不同的映射结果只有唯一的数据样本与其对应,因此在查找确定哈希值的数据时,只需要进行一次数据比较,从而查找速度快,查找效率更高。

上述实施例中,所述构建并训练神经网络模型具有不同的实现方式,下面对其实现方式进行具体介绍。

图12为本发明实施例公开的第一种构建并训练神经网络模型的流程图,参见图12所示,在一个示意性的示例中,所述构建并训练神经网络模型,可以包括:

步骤1201:根据训练数据集中的数据样本构建神经网络模型。

一个数据样本可以看作一个对象,对象有不同的属性。神经网络的输入节点个数,与数据样本的属性个数相同。属性有值,可以是整数,也可以是字符。

步骤1202:将所述训练数据集代入所述神经网络模型,不断调整各个属性的权重值,直至所述训练数据集中的所有数据样本的输出值满足预设条件。

其中,所述权重值的个数与所述神经网络模型的输入节点个数相同。

所述将所述训练数据集代入所述神经网络模型,是将所述训练数据集中的所有数据样本依次代入所述神经网络模型,得到与所述数据样本个数相同的多个输出值。

由于本申请的目的是构造完美哈希,因此,所述训练数据集代入所述神经网络模型后得到的多个输出值需要满足预设条件。由于哈希映射的结果一般为整数,为了保证一个确定的哈希值仅对应一个数据样本,因此,本实施例中,所述预设条件可以但不限制为:所有数据样本的输出值的差值大于或等于1。

图13为本发明实施例公开的第二种构建并训练神经网络模型的流程图。本实施例中,所述数据样本为字符串,所述预设条件为所有数据样本的输出值的差值大于或等于1,所述训练数据集中包括n个数据样本。参见图13,在另外一个示意性的示例中,所述构建并训练神经网络模型,可以包括:

步骤1301:将所述训练数据集中长度最大的字符串的长度确定为输入节点的个数,并构建神经网络模型。

对于字符串数据,可以将每一个字符看作是一个属性。所以属性的个数,即为字符串长度。

步骤1302:分别将n个字符串输入所述神经网络模型,得到n个输出值。

具体的,所述分别将n个字符串输入所述神经网络模型,得到n个输出值,可以包括:针对每一个字符串:将字符串中的每一个字符作为一个属性值,依次输入神经网络模型的输入节点;若存在字符串长度小于所述神经网络模型输入节点个数的情况,将不存在字符位置对应的输入节点的属性值设为0;得到n个输出值。对于字符串集合,属性个数为集合中最长的字符串的长度。对于较短的字符串,不足的部分,属性值取值为0。

属性的值,一般使用对应字符的ascii码。但由于较短的字符串,不足的部分属性值定为0,为了避免属性间值差异太大,所以实际构造的时候,使用字符的ascii码值与字符‘a’的ascii码的差值。如:‘t’的ascii码值是116,‘a’的ascii码值是97,则实际用的数据,‘t’是19。再以字符串为例,如字符串为“test”,则转成ascii码值后,为[116,101,115,116],再减去’a’后,得到[19,4,18,19],即“test”对应的x1=19,x2=4,x3=18,x4=19。每一个数据样本,可以看作一个属性的向量(x1,x2,x3,x4),则字符串”test”对应向量为(19,4,18,19)。

单个数据样本被描述为向量后,整个训练数据集可以表示为一个矩阵。

设训练数据集,即字符串集合中,最长字符串的长度为m,则各数据样本的属性个数为m,神经网络的输入层节点个数也为m。

如上述内容,所述训练数据集中共有n个字符串,所以整个训练数据集可以表示为一个n*m的矩阵,如下:

x1,1x1,2...x1,m

x2,1x2,2...x2,m

x=............

xn,1xn,2...xn,m

每一个属性都有一个权重,所以权重的个数也为m。权重也可以用向量表示。w=(w1,w2,w3,w4)。w也可以看作是1*m的矩阵。

神经网络模型相当于一次映射。如上所述,对每一个数据样本,映射结果为y=w1*x1+w2*x2+...+wm*xm。对于整个训练数据集,可以直接用矩阵方式表示y=wx’。其中x’为x的转置。x是nxm矩阵,x’为m*n矩阵,w为1*m矩阵。映射结果y为1*n矩阵,即每个数据样本映射为一个数值。因此所述训练数据集代入所述神经网络模型后,所述训练数据集中的数据样本的数量与所述神经网络的输出值数量相同。

步骤1303:判断所述n个输出值中是否存在差值小于1的两个输出值,若存在,进入步骤1302,若不存在,则结束。

神经网络模型的训练,需要预设一个目标函数,再通过训练,不断调整权重w。当预设的目标达到时,训练结束。所得的w即为训练结果,也是神经网络模型的描述参数。

本发明预设的目标为:各数据样本应足够散开。则训练的具体过程可以包括:将x代入神经网络,求出y=wx;对y进行排序,得到sy;计算sy中相邻元素的差值。

因为一般哈希函数的结果是整数。整数的最小间隔即为1。因此训练的目标,即要保证所有输出值的差值均大于或等于1。

在对权重设置固定或随机初始后,即可开始对所述神经网络模型进行训练。训练是指不断将x代入所述神经网络模型,查看当前目标,再对w进行必要的调整。

假设按前述目标得到的y差值,选取其中差值小于1的两个元素,即尚未达到目标的相邻元素。设为x中第i个元素和第j个元素之间。即i,j两个数据样本,经过映射后,得到的y值,相距太近,需要对w进行调整。

预设一个学习率learning_rate,取值一般较小,设为0.001。按如下公式对w进行调整。

w=w+learning_rate*(x[j]-x[i])

每次迭代后,对调整后的w进行检查。检查的步骤是:将数据集代入神经网络,求所有数据映射结果y=wx;对映射结果y中元素进行取整;检查取整后,是否有相同元素;如果有相同元素,则表明仍然有冲突,继续训练;如果没有相同元素,则表明没有冲突,结束训练。

上述实施例中,详细介绍了神经网络模型的构建和训练过程,训练好的神经网络模型可直接用于一些数据集构建完美哈希的过程。

图14为本发明实施例公开的构造完美哈希的装置的结构示意图,参见图14所示,构造完美哈希的装置140可以包括:

模型处理模块1401,用于构建并训练神经网络模型。

其中,训练好的神经网络模型的输出结果满足预设条件,所述预设条件可以是:多个输出结果中,任意两个输出结果的差值大于等于1。所述神经网络模型包括多个输入节点,一个输出节点;每一个输入值为一个属性,每一个属性具有一个权重值。

样本映射模块1402,用于将包括多个数据样本的待处理数据集代入所述神经网络模型,得到多个输出值。

其中,所述多个数据样本的数量和所述多个输出值的数量相同。这样,一个数据样本经过所述神经网络模型的映射后,输出一个对应的输出值,保证一个确定的输出值仅对应唯一的一个数据样本,从而保证完美哈希的实现。

哈希表生成模块1403,用于确定所述待处理数据集中所有数据样本到输出值的映射关系,并记录输出值对应的数据样本,生成完美哈希表。

在分别对所述待处理训练集中的所有数据样本进行神经网络映射后,得到对应的多个输出值,为了便于后续查找,可以根据数据样本与输出值的映射对应关系,生成完美哈希表,以供后续查找某数据是否在所述待处理训练集中。

在一个示意性的示例中,所述哈希表生成模块1403的结构可参见图15,图15为本发明实施例公开的哈希表生成模块的结构示意图,如图15所示,所述哈希表生成模块1403可以包括:

第一处理模块1501,用于将所述待处理数据集中的h个数据样本映射到1~k中的h个整数。

其中,所述h个整数即为h个输出值,其中,k是所述h个输出值的跨度,为正整数且大于h。

所述第一处理模块1501可以包括:取整处理模块,用于将h个数据样本的h个输出值进行取整处理;排序处理模块,用于将经过取整处理后的h个输出值按照大小进行排序;减值处理模块,用于将h个输出值分别减去最小的输出值;映射关系确定模块,用于确定h个数据样本到减去最小的输出值后的数值的映射关系。

根据上述内容,已经训练好的神经网络模型,代入x并取整后,y值均为整数,但一般不连续。本实施例中,可以对y进行调整,即:对y进行排序;取最小值,最大值;对y中每一个元素,减去最小值;调整后,y的起始值为0。

y的跨度(即最大值减最小值),一般大于数据集中数据个数n,设为k。

这样,神经网将模型将待处理数据集中的n个数据样本,无冲突地映射到1~k中n个整数。

第二处理模块1502,用于将1-k中的所有整数标记为有效值和无效值。

其中有效值为映射结果对应的整数,且个数为h,依次标记为1-h;无效值为非映射结果整数,标记为-1。

为了使映射的结果唯一的对应于1~n之间一个数值,在前述数据样本映射完成的基础上,可以再设置二级映射。

建立一个二级映射表,包含k个元素;从1~k检查,如果有对应数据映射,则依次设为1~n中数值。如果没有对应的数据映射,则设为-1。

第三处理模块1503,用于确定每一个有效值对应的样本数据,生成完美哈希表。

进一步的,本发明实施例还可以设置三级映射表,记录哈希值,即神经网络模型的输出值与数据样本的对应关系。这样,生成如图11所示的,记录有数据样本与哈希值的映射关系以及对应关系的完整的完美哈希表。

基于如图11所示的完美哈希表的数据查找的一个具体实现可以包括:设待查找的字符串为s,首先按上述规则,对s进行向量化,得到向量表示sx;再将sx代入神经网络模型,求第一级映射结果sy,sy=w*sx;再查找二级映射表,查最终映射结果;如果二级映射结果为-1,则表明s不在集合中;如果二级映射结果为有效值,则进一步查找该哈希值对应的字符串s’,再比较s与s’,检查是否相等。如果相等,表明s在集合中;如果不相等,则表明s不在集合中。

根据上述内容,本实施例中,一次查找,需要做三级映射。第一级映射,是基于神经网络模型实现。对于已经训练好的神经网络模型,该映射实际是一个函数:y=wx。该函数实现过程时间复杂度为o(1),即与集合本身的大小无关。第二级映射是从1~k到1~n的映射,实现基于定长数组,时间复杂度为o(1)。第三级映射也是数组元素的字位,时间复杂度是o(1)。而最后一步样本数据的比较,是任何哈希实现都必须要做的。

完美哈希保证了每一个哈希值最多只对应一个数据样本,因此最后一步数据样本的比较,只需要与一个数据样本进行比较,简单快速。

本实施例中,所述构造完美哈希的装置,采用神经网络模型进行数据样本的一次映射,并保证每个数据样本的映射结果不同,即不同的映射结果只有唯一的数据样本与其对应,因此在查找确定哈希值的数据时,只需要进行一次数据比较,从而查找速度快,查找效率更高。

上述实施例中,所述模型处理模块1401具有不同的实现方式,下面对其实现方式进行具体介绍。

图16为本发明实施例公开的第一种模型处理模块的结构示意图,如图16所示,所述模型处理模块1401可以包括:

模型构建模块1601,用于根据训练数据集中的数据样本构建神经网络模型。

一个数据样本可以看作一个对象,对象有不同的属性。神经网络的输入节点个数,与数据样本的属性个数相同。属性有值,可以是整数,也可以是字符。

模型训练模块1602,用于将所述训练数据集代入所述神经网络模型,不断调整各个属性的权重值,直至所述训练数据集中的所有数据样本的输出值满足预设条件。

其中,所述权重值的个数与所述神经网络模型的输入节点个数相同。

所述将所述训练数据集代入所述神经网络模型,是将所述训练数据集中的所有数据样本依次代入所述神经网络模型,得到与所述数据样本个数相同的多个输出值。

由于本申请的目的是构造完美哈希,因此,所述训练数据集代入所述神经网络模型后得到的多个输出值需要满足预设条件。由于哈希映射的结果一般为整数,为了保证一个确定的哈希值仅对应一个数据样本,因此,本实施例中,所述预设条件可以但不限制为:所有数据样本的输出值的差值大于或等于1。

图17为本发明实施例公开的第二种模型处理模块的结构示意图。本实施例中,所述数据样本为字符串,所述预设条件为所有数据样本的输出值的差值大于或等于1,所述训练数据集中包括n个数据样本。如图17所示,所述模型处理模块1401可以包括:

模型构建模块1701,用于将所述训练数据集中长度最大的字符串的长度确定为输入节点的个数,并构建神经网络模型。

对于字符串数据,可以将每一个字符看作是一个属性。所以属性的个数,即为字符串长度。

样本代入模块1702,用于分别将n个字符串输入所述神经网络模型,得到n个输出值。

具体的,所述样本代入模块1702可以包括:属性值输入模块,用于针对每一个字符串:将字符串中的每一个字符作为一个属性值,依次输入神经网络模型的输入节点;字符串处理模块,用于若存在字符串长度小于所述神经网络模型输入节点个数的情况,将不存在字符位置对应的输入节点的属性值设为0;输出值确定模块,用于得到n个输出值。对于字符串集合,属性个数为集合中最长的字符串的长度。对于较短的字符串,不足的部分,属性值取值为0。

属性的值,一般使用对应字符的ascii码。但由于较短的字符串,不足的部分属性值定为0,为了避免属性间值差异太大,所以实际构造的时候,使用字符的ascii码值与字符‘a’的ascii码的差值。如:‘t’的ascii码值是116,‘a’的ascii码值是97,则实际用的数据,‘t’是19。再以字符串为例,如字符串为“test”,则转成ascii码值后,为[116,101,115,116],再减去’a’后,得到[19,4,18,19],即“test”对应的x1=19,x2=4,x3=18,x4=19。每一个数据样本,可以看作一个属性的向量(x1,x2,x3,x4),则字符串”test”对应向量为(19,4,18,19)。

单个数据样本被描述为向量后,整个训练数据集可以表示为一个矩阵。

设训练数据集,即字符串集合中,最长字符串的长度为m,则各数据样本的属性个数为m,神经网络的输入层节点个数也为m。

权重调整模块1703,用于在所述n个输出值中存在差值小于1的两个输出值的情况下,调整权重值。

神经网络模型的训练,需要预设一个目标函数,再通过训练,不断调整权重w。当预设的目标达到时,训练结束。所得的w即为训练结果,也是神经网络模型的描述参数。

本发明预设的目标为:各数据样本应足够散开。则训练的具体过程可以包括:将x代入神经网络,求出y=wx;对y进行排序,得到sy;计算sy中相邻元素的差值。

因为一般哈希函数的结果是整数。整数的最小间隔即为1。因此训练的目标,即要保证所有输出值的差值均大于或等于1。

在对权重设置固定或随机初始后,即可开始对所述神经网络模型进行训练。训练是指不断将x代入所述神经网络模型,查看当前目标,再对w进行必要的调整。

假设按前述目标得到的y差值,选取其中差值小于1的两个元素,即尚未达到目标的相邻元素。设为x中第i个元素和第j个元素之间。即i,j两个数据样本,经过映射后,得到的y值,相距太近,需要对w进行调整。

预设一个学习率learning_rate,取值一般较小,设为0.001。按如下公式对w进行调整。

w=w+learning_rate*(x[j]-x[i])

每次迭代后,对调整后的w进行检查。检查的步骤是:将数据集代入神经网络,求所有数据映射结果y=wx;对映射结果y中元素进行取整;检查取整后,是否有相同元素;如果有相同元素,则表明仍然有冲突,继续训练;如果没有相同元素,则表明没有冲突,结束训练。

上述实施例中,详细介绍了神经网络模型的构建和训练过程,训练好的神经网络模型可直接用于一些数据集构建完美哈希的过程。

需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

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