CN109885576B - 一种哈希表创建方法及系统、计算设备及存储介质 - Google Patents

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

Info

Publication number
CN109885576B
CN109885576B CN201910169079.3A CN201910169079A CN109885576B CN 109885576 B CN109885576 B CN 109885576B CN 201910169079 A CN201910169079 A CN 201910169079A CN 109885576 B CN109885576 B CN 109885576B
Authority
CN
China
Prior art keywords
hash
target character
hash table
character string
initial
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
Application number
CN201910169079.3A
Other languages
English (en)
Other versions
CN109885576A (zh
Inventor
李哈迪
杨林
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhuhai Kingsoft Digital Network Technology Co Ltd
Original Assignee
Zhuhai Kingsoft Online Game Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Zhuhai Kingsoft Online Game Technology Co Ltd filed Critical Zhuhai Kingsoft Online Game Technology Co Ltd
Priority to CN201910169079.3A priority Critical patent/CN109885576B/zh
Publication of CN109885576A publication Critical patent/CN109885576A/zh
Application granted granted Critical
Publication of CN109885576B publication Critical patent/CN109885576B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请提供一种哈希表创建方法及系统、计算设备及存储介质,该方法包括:基于设定的哈希算法对目标字符串分别进行初始哈希运算,得到各个字符串对应的初始哈希值;确定目标字符串的数量M及存在冲突的初始哈希值的数量N,根据M和N确定目标字符串的初始哈希值的冲突率;根据所述初始哈希值的冲突率确定哈希算法的运算参数;基于所述运算参数分别对目标字符串进行哈希运算,得到各目标字符串与运算参数对应的运算哈希值;根据所述初始哈希值与所述运算哈希值构建树表示,并基于所述树表示创建对应的哈希表。

Description

一种哈希表创建方法及系统、计算设备及存储介质
技术领域
本申请涉及计算机技术领域,特别涉及一种哈希表创建方法及系统、计算设备及存储介质。
背景技术
哈希表也叫散列表,是根据关键码值而进行直接访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。散列函数能使对一个数据序列的访问过程更加有效,通过散列函数,数据元素将被更快地定位。
在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确定目标字符串的初始哈希值的冲突率。
本说明书一个或多个实施例中,若存在两个字符串不同,但是初始哈希值相同、这两个字符串的初始哈希值冲突就存在冲突。
例如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确定运算参数的个数。
本说明书一个或多个实施例中,当运算参数值为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至步骤410。
步骤402、根据目标字符串的初始哈希值为索引在第i个树表示中查找与所述索引对应的节点,i∈[1,n+1],n表示运算参数的总数,i和n均为正整数。
实际应用中,i从1开始取值。
步骤404、判断是否在第i个树表示中查找到相应的节点。
本说明书一个或多个实施例中,若未查找到相应的节点,则执行步骤406,若查找到相应的节点,则执行步骤408。
步骤406、以所述初始哈希值和运算哈希值为关键字创建节点,并将所述字符串的首地址添加到所创建节点的节点值中。
步骤408、i的值增加1,判断i是否大于n+1。
本说明书一个或多个实施例中,若在第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]。
实际应用中,i从1开始取值,L为哈希值的长度,n为运算参数的个数,h为哈希表项,i、n、h和L均为正整数。
步骤606、判断所述哈希表项内容h是否为空。
本说明书一个或多个实施例中,当所述哈希表项的表项内容为空时,则执行步骤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个哈希表,待查询的目标字符串“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。
第一哈希运算模块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-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本说明书并不受所描述的动作顺序的限制,因为依据本说明书,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本说明书所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
以上公开的本说明书优选实施例只是用于帮助阐述本说明书。可选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本说明书的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本申请的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本申请。本说明书仅受权利要求书及其全部范围和等效物的限制。

Claims (11)

1.一种哈希表创建的方法,其特征在于,包括:
基于设定的哈希算法对目标字符串分别进行初始哈希运算,得到各个字符串对应的初始哈希值;
确定目标字符串的数量M及存在冲突的初始哈希值的数量N,根据M和N确定目标字符串的初始哈希值的冲突率y,其中M和N为正整数;
设置哈希值冲突率的容忍度阈值p;
根据所述容忍度阈值p和所述冲突率y确定运算参数的个数n,n为正整数;
选取n个不相等的正整数作为所述哈希算法的运算参数;
基于所述运算参数分别对目标字符串进行哈希运算,得到目标字符串与运算参数对应的运算哈希值;
根据所述初始哈希值与所述运算哈希值构建树表示,并基于所述树表示创建对应的哈希表,以用于确定待查询的目标字符串在所述哈希表中的存储地址。
2.如权利要求1所述的方法,其特征在于,基于所述运算参数分别对目标字符串进行哈希运算,得到各目标字符串与运算参数对应的运算哈希值包括:
基于每个运算参数对目标字符串进行哈希运算,得到目标字符串与所述运算参数对应的运算哈希值。
3.如权利要求1所述的方法,其特征在于,根据所述初始哈希值与所述运算哈希值构建树表示包括:
根据目标字符串的初始哈希值为索引在第i个树表示中查找与所述索引对应的节点,i∈[1,n+1],n表示运算参数的总数,i和n均为正整数;
若在第i个树表示中未查找到相应的节点,则以所述初始哈希值和运算哈
希值为关键字创建节点,并将所述字符串的首地址添加到所创建节点的节点值中;
若在第i个树表示中查找到相应的节点,则i的值增加1,判断i与n+1的大小关系;
若i小于等于n+1,则继续执行根据目标字符串的初始哈希值为索引在第i个树表示中查找与所述索引对应的节点步骤;
若i大于n+1,则树表示的构建过程结束。
4.如权利要求1所述的方法,其特征在于,所述基于所述树表示创建对应的哈希表包括:
完成一次树表示的遍历;
根据遍历得到的所述树表示中各节点的信息创建与所述树表示对应的哈希表。
5.如权利要求4所述的方法,其特征在于,所述根据遍历得到的所述树
表示中各节点的信息创建与所述树表示对应的哈希表包括:
根据所述目标字符串的初始哈希值确定哈希表项索引;
根据所述哈希表项索引从第i个哈希表中查询对应的哈希表项h,作为当前哈希表项,i∈[1,n+1],h∈[1,L],L表示哈希表的长度,n为运算参数的总数,i、L和h均为正整数;
判断所述哈希表项h的内容是否为空;
当所述哈希表项h内容为空时,将第i个树表示节点中目标字符串的初始哈希值、运算哈希值和字符串首地址添加到当前哈希表项的表项中;
当所述哈希表项h内容不为空时,则从所述第i个哈希表中查询对应的哈希表项h=h+1,作为当前哈希表项,继续执行判断所述哈希表项h的内容是否为空的步骤。
6.如权利要求1至5中任意一项所述的方法,其特征在于,所述树表示包括红黑树。
7.如权利要求1所述的方法,其特征在于,还包括:
接收字符串地址查询请求,所述查询请求中携带有待查询的目标字符串;
基于设定的哈希算法及运算参数对所述待查询的目标字符串进行哈希运算,得到待查询的目标字符串的初始哈希值及运算哈希值;
获取创建完成的哈希表;
根据待查询的目标字符串的初始哈希值及运算哈希值对哈希表进行检索,确定所述待查询的目标字符串的存储地址。
8.如权利要求7所述的方法,其特征在于,所述根据待查询的目标字符串的初始哈希值及运算哈希值对初始哈希表和运算哈希表进行检索,确定所述待查询的目标字符串的存储地址包括:
根据待查询的目标字符串的初始哈希值确定哈希表项索引;
根据所述哈希表项索引在所述哈希表中查找对应的哈希表项内容;
比较待查询的目标字符串的初始哈希值与运算哈希值与第i个哈希表对应的哈希表项中的哈希值是否相等,i∈[1,n+1],n表示运算参数的总数,i和n均为正整数;
若相等,则将第i个哈希表中对应的哈希表项内容的字符串首地址作为所述待查询的目标字符串的存储地址返回以响应所述查询请求;
若不相等,则i的值增加1,判断i与n+1的大小关系;
若i小于等于n+1,则比较待查询的目标字符串的初始哈希值与运算哈希值与第i个哈希表对应的哈希表项中的哈希值是否相等的步骤。
9.一种哈希表创建的装置,其特征在于,包括:
第一哈希运算模块,被配置为基于设定的哈希算法对目标字符串分别进行初始哈希运算,得到各个字符串对应的初始哈希值;
第一处理模块,被配置为确定目标字符串的数量M及存在冲突的初始哈希值的数量N,根据目标字符串的数量M和存在冲突的初始哈希值的数量N确定目标字符串的初始哈希值的冲突率y;
设置模块,被配置为设置哈希值冲突率的容忍度阈值p;
确定模块,被配置为根据所述容忍度阈值p和所述冲突率y确定运算参数的个数n,n为正整数;
第二处理模块,被配置为选取n个不相等的正整数作为所述哈希算法的运算参数;
第二哈希运算模块,被配置为基于所述运算参数分别对目标字符串进行哈希运算,得到目标字符串与运算参数对应的运算哈希值;
第三处理模块,被配置为根据所述初始哈希值与所述运算哈希值构建树表示,并基于所述树表示创建对应的哈希表,以用于确定待查询的目标字符串在所述哈希表中的存储地址。
10.一种计算设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机指令,其特征在于,所述处理器执行所述指令时实现该指令被处理器执行时实现权利要求1-8中任意一项所述方法的步骤。
11.一种计算机可读存储介质,其存储有计算机指令,其特征在于,该指令被处理器执行时实现权利要求1-8中任意一项所述方法的步骤。
CN201910169079.3A 2019-03-06 2019-03-06 一种哈希表创建方法及系统、计算设备及存储介质 Active CN109885576B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910169079.3A CN109885576B (zh) 2019-03-06 2019-03-06 一种哈希表创建方法及系统、计算设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910169079.3A CN109885576B (zh) 2019-03-06 2019-03-06 一种哈希表创建方法及系统、计算设备及存储介质

Publications (2)

Publication Number Publication Date
CN109885576A CN109885576A (zh) 2019-06-14
CN109885576B true CN109885576B (zh) 2020-12-01

Family

ID=66930995

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910169079.3A Active CN109885576B (zh) 2019-03-06 2019-03-06 一种哈希表创建方法及系统、计算设备及存储介质

Country Status (1)

Country Link
CN (1) CN109885576B (zh)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110633275B (zh) * 2019-07-26 2023-12-12 广东联合电子服务股份有限公司 一种etc交易数据滞留分析方法及装置
CN110505051B (zh) * 2019-08-28 2022-11-01 无锡科技职业学院 字符串哈希处理方法及装置
CN111107068B (zh) * 2019-12-09 2021-03-09 江苏云涌电子科技股份有限公司 一种fpga高效规则匹配方法及终端
CN111984649A (zh) * 2020-08-20 2020-11-24 北京金山云网络技术有限公司 数据索引的查找方法、装置和相关设备
CN113362062B (zh) * 2021-05-21 2024-01-05 山东大学 一种区块链交易排序方法、存储介质及设备
CN114707023B (zh) * 2022-02-28 2024-01-23 苏州浪潮智能科技有限公司 一种哈希表遍历方法、系统、设备及计算机可读存储介质
CN115576954B (zh) * 2022-11-24 2023-04-07 恒生电子股份有限公司 哈希表的确定方法及装置
CN116822456A (zh) * 2023-07-03 2023-09-29 中科驭数(北京)科技有限公司 字符串编码方法、装置、设备及存储介质
CN116610485B (zh) * 2023-07-21 2024-04-30 深圳市城市交通规划设计研究中心股份有限公司 一种隔离网闸数据校验方法、电子设备及存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101641695A (zh) * 2007-01-22 2010-02-03 韦伯森斯英国有限公司 资源接入过滤系统及供与资源接入过滤系统一起使用的数据库结构
CN106096332A (zh) * 2016-06-28 2016-11-09 深圳大学 面向存储的dna序列的并行快速匹配方法及其系统

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101692651B (zh) * 2009-09-27 2014-12-31 中兴通讯股份有限公司 一种哈希查找表的方法和装置
US8924365B2 (en) * 2011-02-08 2014-12-30 Wavemarket, Inc. System and method for range search over distributive storage systems
CN104866502B (zh) * 2014-02-25 2020-10-13 深圳市中兴微电子技术有限公司 数据匹配的方法及装置
CN104572876A (zh) * 2014-12-19 2015-04-29 珠海金山网络游戏科技有限公司 一种软件对应配置文件的读取方法和装置
CN105117471A (zh) * 2015-08-31 2015-12-02 北京金山安全软件有限公司 一种读写操作方法及装置
CN106407400B (zh) * 2016-09-21 2019-08-06 中国科学院信息工程研究所 一种面向流式数据的实时摘要生成方法
CN107153707B (zh) * 2017-05-12 2020-08-14 华中科技大学 一种针对非易失内存的哈希表构建方法及系统
CN107729577B (zh) * 2017-11-29 2020-06-19 厦门市美亚柏科信息股份有限公司 一种基于多维哈希表的数据查找方法、终端设备及存储介质
CN107992577B (zh) * 2017-12-04 2020-08-11 奇安信科技集团股份有限公司 一种哈希表数据冲突处理方法及装置

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101641695A (zh) * 2007-01-22 2010-02-03 韦伯森斯英国有限公司 资源接入过滤系统及供与资源接入过滤系统一起使用的数据库结构
CN106096332A (zh) * 2016-06-28 2016-11-09 深圳大学 面向存储的dna序列的并行快速匹配方法及其系统

Also Published As

Publication number Publication date
CN109885576A (zh) 2019-06-14

Similar Documents

Publication Publication Date Title
CN109885576B (zh) 一种哈希表创建方法及系统、计算设备及存储介质
US7818303B2 (en) Web graph compression through scalable pattern mining
CN114282073B (zh) 数据存储方法及装置、数据读取方法及装置
CN106326475B (zh) 一种高效的静态哈希表实现方法及系统
CN112115227B (zh) 数据的查询方法、装置、电子设备及存储介质
CN108399213B (zh) 一种面向用户个人文件的聚类方法及系统
CN111868710A (zh) 搜索大规模非结构化数据的随机提取森林索引结构
CN112231350B (zh) 一种基于知识图谱的企业商机挖掘方法和装置
CN111666468A (zh) 一种基于团簇属性在社交网络中搜索个性化影响力社区的方法
CN106599097B (zh) 海量特征串集合的匹配方法和装置
CN113297269A (zh) 数据查询方法及装置
CN112817916B (zh) 基于ipfs的数据获取方法及系统
CN106844553B (zh) 基于样本数据的数据探测和扩充方法及装置
CN111723092A (zh) 数据处理方法及装置
CN111414527A (zh) 相似项目的查询方法、装置及存储介质
CN113297204B (zh) 索引生成方法及装置
US9292553B2 (en) Queries for thin database indexing
CN115422270A (zh) 信息处理方法及装置
JP5555238B2 (ja) ベイジアンネットワーク構造学習のための情報処理装置及びプログラム
CN113779029A (zh) 一种数据查询的方法及装置
JP7121706B2 (ja) 情報処理装置、情報処理方法、及び情報処理プログラム
CN112579839B (zh) 大规模特征的多模匹配方法、装置及存储介质
CN112580747A (zh) 匹配方法及装置
KR102062139B1 (ko) 지능형 자료구조 기반의 데이터 처리 방법 및 그를 위한 장치
CN115576954B (zh) 哈希表的确定方法及装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CP03 Change of name, title or address
CP03 Change of name, title or address

Address after: 519000 Room 102, 202, 302 and 402, No. 325, Qiandao Ring Road, Tangjiawan Town, high tech Zone, Zhuhai City, Guangdong Province, Room 102 and 202, No. 327 and Room 302, No. 329

Patentee after: Zhuhai Jinshan Digital Network Technology Co.,Ltd.

Address before: Room 102, Room 202, Room 302, Room 402, Room 327, Room 102, Room 202, Room 329, Room 302, No. 325, Qiandao Ring Road, Tangjiawan Town, High-tech Zone

Patentee before: ZHUHAI KINGSOFT ONLINE GAME TECHNOLOGY Co.,Ltd.