CN104504038A - 一种减少哈希冲突的哈希查找方法 - Google Patents
一种减少哈希冲突的哈希查找方法 Download PDFInfo
- Publication number
- CN104504038A CN104504038A CN201410778520.5A CN201410778520A CN104504038A CN 104504038 A CN104504038 A CN 104504038A CN 201410778520 A CN201410778520 A CN 201410778520A CN 104504038 A CN104504038 A CN 104504038A
- Authority
- CN
- China
- Prior art keywords
- hash
- cryptographic hash
- numerical value
- cryptographic
- minute
- 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.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9014—Indexing; Data structures therefor; Storage structures hash tables
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种减少哈希冲突的哈希查找方法,包括对将要查找哈希值的哈希关键码进行分析,初始哈希关键码所对应的三个哈希值,三个哈希值不相同;输入要查找的哈希关键码所对应的新的哈希值h1’、h2’、h3’;判断哈希值h1’、h2’、h3’和哈希值h1、h2、h3是否满足哈希值h1与新的哈希值h1’相等、哈希值h2与新的哈希值h2’相等并且哈希值h3与新的哈希值h3’相等,在满足以上关系的情况下,确定新的哈希值h1’、h2’、h3’即为哈希关键码所对应的哈希值。本发明的有益效果为:本改进方法有效解决了哈希查找中发生冲突的情况下,不需要进行关键字串的比较查找,而只是进行常数的比较,提高了查找的效率。
Description
技术领域
本发明涉及一种减少哈希冲突的哈希查找方法。
背景技术
哈希方法,又名散列算法,哈希方法将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值;哈希值是一段数据唯一且极其紧凑的数值表示形式,散列算法一般用于快速查找和加密算法,著名的散列算法有RS Hash、JS Hash、PJW Hash、ELF Hash、BKDR Hash、SDBM Hash、DJB Hash以及BP Hash等。
哈希表(HashTable),也叫散列表,是根据关键码值(Key value)而直接进行访问的数据结构,也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度;这个映射函数叫做散列函数,存放记录的数组叫做散列表;给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数,若结构中存在关键字和K相等的记录,则必定存储在f(K)的位置上,由此,不需比较便可直接取得所查记录。这个对应关系f称为散列函数(Hash function),按这个思想建立的表为散列表。
碰撞或冲突, 如果两个不同的输入通过散列函数计算得出的结果是一样的,则称这两个串是一个碰撞,即key1≠key2,而f(key1)=f(key2),既然是把任意长度的字符串变成固定长度的字符串,所以必有一个输出串对应无穷多个输入串,碰撞是必然存在的。
哈希冲突:两个不同的关键字,由于散列函数值相同,因而被映射到同一表位置上,该现象称为冲突(collision)或碰撞;发生冲突的两个关键字称为该散列函数的同义词(synonym)。
冲突基本上不可避免的,除非数据很少,我们只能采取措施尽量避免冲突,或者寻找解决冲突的办法。
影响冲突的因素,冲突的频繁程度除了与选择的哈希函数相关外,还与表的填满程度相关。
设m和n分别表示表长和表中填入的结点数,则将α=n/m定义为散列表的装填因子(load factor),α越大,表越满,冲突的机会也越大;通常取α≤1。
1、现有哈希冲突处理
1)开放寻址法:Hi=(H(key) + di) MOD m,i=1,2,…,k(k<=m-1),其中H(key)为散列函数,m为散列表长,di为增量序列,可有下列三种取法:
1.1 di=1,2,3,…,m-1,称线性探测再散列;
1.2 di=1^2,-1^2,2^2,-2^2,⑶^2,…,±(k)^2,(k<=m/2)称二次探测再散列;
1.3 di=伪随机数序列,称伪随机探测再散列。
2)再散列法:Hi=RHi(key),i=1,2,…,k RHi均是不同的散列函数,即在同义词产生地址冲突时计算另一个散列函数地址,直到冲突不再发生,这种方法不易产生“聚集”,但增加了计算时间。
3)链地址法(拉链法),同一个散列值存储在同一个链表。
4)建立一个公共溢出区
2、现有处理冲突的方法缺点
1)开放寻址法,在冲突发生时,需要进行模运算,极端情况下,将重复多次。
2)再散列法,在冲突发生时,需要通过另一散列函数进行计算散列值,增加了计算的时间,如果另一散列再次冲突,计算时间再次增加,并且影响性能。
3)链地址法,同一个链表中的都是相同的散列表,为了确定查找的串,需要进行串的比较,增加时间。
4)建立公共溢出区,同样在冲突时,将在溢出区中进行查找,还是需要进行串的比较。
综上所述,现有处理冲突有两个大的缺点, 一是需要超过一次的散列,另一个是要进行串的比较,即散列表的查找过程仍是一个和关键字比较的过程,这两大缺点降低了查找性能。
针对相关技术中的问题,目前尚未提出有效的解决方案。
发明内容
本发明的目的是提供一种减少哈希冲突的哈希查找方法,以克服目前现有技术存在的上述不足。
本发明的目的是通过以下技术方案来实现:
一种减少哈希冲突的哈希查找方法,包括以下步骤:
对将要查找哈希值的哈希关键码进行分析,初始所述哈希关键码所对应的三个哈希值,其中,所述三个哈希值不相同;
其中,分别通过预先设定的三种哈希运算规则,计算出所述自变量所对应的哈希值h1、h2、h3;
输入要查找的哈希关键码所对应的新的哈希值h1’、h2’、h3’;
判断所述哈希值h1’、h2’、h3’和所述哈希值h1、h2、h3是否满足哈希值h1与新的哈希值h1’相等、哈希值h2与新的哈希值h2’相等并且哈希值h3与新的哈希值h3’相等,在满足以上关系的情况下,确定所述新的哈希值h1’、h2’、h3’即为所述哈希关键码所对应的哈希值。
进一步的,其中,所述三种哈希运算规则相近但不相同,所述三种哈希运算的具体规则如下:
哈希值h1向左移5位,然后将经过移位后的数值与原始的哈希值h1进行加法运算,然后再与预先输入的关键字进行加法运算,经过运算后得到的值等于哈希值h1,即可计算出所述哈希值h1的具体数值;
哈希值h2向左移5位,然后经过移位后的数值减去原始的哈希值h2,经过减法运算后的数值在于预先输入的关键字进行加法运算,经过运算后得到的数值等于哈希值h2,即可计算出所述哈希值h2的具体数值;
哈希值h3向左移5位,然后与预先输入的关键字进行加法运算,然后将原始的哈希值向右移2位,将经过加法运算后得到的数值与经过向右移位的哈希值进行加法运算,得到的数值等于哈希值h3的按位异或值,即可计算出所述哈希值h3的具体数值。
进一步的,所述h1’ 、h2’以及 h3’三个哈希值为常数整形值。
本发明的有益效果为:本改进方法只需要最初添加关键字时的一次散列运算,在冲突发生时,只进行整型比较,降低冲突发生时查找的时间,提高运算性能;有效解决了哈希查找中发生冲突的情况下,不需要进行关键字串的比较查找,而只是进行常数的比较,提高了查找的效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是根据本发明实施例所述的一种哈希方法的哈希表的表示图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示,根据本发明实施例的一种减少哈希冲突的哈希查找方法,包括以下步骤:
提供哈希表,所述哈希表包括由一系列哈希关键字构成的存储空间表;
设置一次的散列函数运算,所述散列函数包括第一哈希函数h1=f1(key)、第二哈希函数h2=f2(key)和第三哈希函数h3=f3(key);
对将要查找哈希值的哈希关键码进行分析,初始所述哈希关键码所对应的三个哈希值,其中,所述三个哈希值不相同;
其中,分别通过预先设定的三种哈希运算规则,计算出所述自变量所对应的哈希值h1、h2、h3;
输入要查找的哈希关键码所对应的新的哈希值h1’、h2’、h3’;
判断所述哈希值h1’、h2’、h3’和所述哈希值h1、h2、h3是否满足哈希值h1与新的哈希值h1’相等、哈希值h2与新的哈希值h2’相等并且哈希值h3与新的哈希值h3’相等,在满足以上关系的情况下,确定所述新的哈希值h1’、h2’、h3’即为所述哈希关键码所对应的哈希值。
接收哈希关键码key,将接收到的哈希关键码key带入上述的散列函数中,得到三个不同的哈希值h1、h2以及h3,将哈希值h1作为主哈希值插入哈希表,并将哈希值h2和h3作为从属哈希值插入哈希表;
然后采用冲突采用链地址方法,同一个哈希值存储在同一个链表,在哈希表中查找时,输入预先编辑或要输入的 h1’ 、h2’以及 h3’三个哈希值;
根据所述h1’ 、h2’以及 h3’三个新的哈希值确定相对应的关键字,当h1’ 、h2’以及 h3’满足公式h1 = h1’ && h2 = h2’ && h3==h3’,即找到了与关键码key相对应的关键字。
所述第一哈希函数h1=f1(key)、第二哈希函数h2=f2(key)和第三哈希函数h3=f3(key)的运算规则相近但不相同。
其中,所述三种哈希运算规则相近但不相同,所述三种哈希运算的具体规则如下:
H1 = (H1 << 5 ) + H1 + key[i];其含义为:希值h1向左移5位,其中,向左移5位相当于乘以32,然后将经过移位后的数值与原始的哈希值h1进行加法运算,然后再与预先输入的关键字进行加法运算,经过运算后得到的值等于哈希值h1,即可计算出所述哈希值h1的具体数值;
H2 =(H2 << 5 ) - H2 + key[i];其含义为:哈希值h2向左移5位,然后经过移位后的数值减去原始的哈希值h2,经过减法运算后的数值在于预先输入的关键字进行加法运算,经过运算后得到的数值等于哈希值h2,即可计算出所述哈希值h2的具体数值;
H3 ^= ( ( H3 << 5 ) + key[i] + (H3 >> 2 ) );其含义为:哈希值h3向左移5位,然后与预先输入的关键字进行加法运算,然后将原始的哈希值向右移2位,将经过加法运算后得到的数值与经过向右移位的哈希值进行加法运算,得到的数值等于哈希值h3的按位异或值,即可计算出所述哈希值h3的具体数值。
所述h1’ 、h2’以及 h3’三个哈希值为常数整形值。
具体应用时,通过一次的散列函数运算,一个关键字串将得到三个不同的整形散列值。
散列函数运算之前,根据关键字初始化三个不同的哈希值,三个哈希值计算关键串的散列值的运算规则相近但不相同,即 h1=f1(key) 、h2 = f2(key)以及 h3 = f3(key), f1、f2和f3为相近但不相同的运算规则,可以在一个遍历关键码key的运算过程中,生成三个哈希值,以 h1为主哈希值插入哈希表,h2和 h3哈希值作为从属值插入哈希表。
冲突采用链地址方法,在哈希表查找时,同哈希表插入一样,一次运算生成h1’、h2’以及h3’三个新哈希值,在冲突发生时,将不再需要进行串的比较,而只需要进行三个哈希值的比较,即满足 h1 = h1’ && h2 = h2’ && h3==h3’的条件时,就说明我们找到了与关键码key相对应的关键字。
通过上述运算方法,可知,本方法通过一次串的编历运算得到三个哈希值,并且在冲突发生时,只进行三个常数整型值比较,速度极快。
在发生冲突时,如图1所示,是一个哈希表的一个表示,左边第一列灰框是表内的元素,第二列之后的都是冲突的元素。
当查找时,根据h1’首先定位到左边第一列,根据h1’=h1 && h2’ =h2 && h3’=h3 ,对查找的key按算法生成 h1’ 、h2’、h3’ ,与原有哈希表中的h1、h2、h3进行整数常数比较,不管冲突与否,都能快速确定位置,在删除关键字时也是如此;如果不成立,即为冲突情况,当只有h1`与h1相等时,说明冲突了,但是其他两个没有;则需遍历后续元素,后续元素同样也是常数比较,直到满足条件,找到相应的关键字为止。
在目前互联网的流量爆炸性增长的情况下,网络分析设备、防火墙、NAT网关等,核心处理模块都需要用到哈希运算查找,在核心交换机、路由器中,以及DPI设备、网络分流器,采用本发明中的哈希方法,在不改变系统原有功能的前提下,能降低设备CPU占用率15%左右,降低了系统的功耗,提高了设备的稳定性。且改进的哈希方法通用性强,目标系统稍微修改就能使用。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (3)
1.一种减少哈希冲突的哈希查找方法,其特征在于,包括以下步骤:
对将要查找哈希值的哈希关键码进行分析,初始所述哈希关键码所对应的三个哈希值,其中,所述三个哈希值不相同;
其中,分别通过预先设定的三种哈希运算规则,计算出所述自变量所对应的哈希值h1、h2、h3;
输入要查找的哈希关键码所对应的新的哈希值h1’、h2’、h3’;
判断所述哈希值h1’、h2’、h3’和所述哈希值h1、h2、h3是否满足哈希值h1与新的哈希值h1’相等、哈希值h2与新的哈希值h2’相等并且哈希值h3与新的哈希值h3’相等,在满足以上关系的情况下,确定所述新的哈希值h1’、h2’、h3’即为所述哈希关键码所对应的哈希值。
2.根据权利要求1所述的减少哈希冲突的哈希查找方法,其特征在于,其中,所述三种哈希运算规则相近但不相同,所述三种哈希运算的具体规则如下:
哈希值h1向左移5位,然后将经过移位后的数值与原始的哈希值h1进行加法运算,然后再与预先输入的关键字进行加法运算,经过运算后得到的值等于哈希值h1,即可计算出所述哈希值h1的具体数值;
哈希值h2向左移5位,然后经过移位后的数值减去原始的哈希值h2,经过减法运算后的数值在于预先输入的关键字进行加法运算,经过运算后得到的数值等于哈希值h2,即可计算出所述哈希值h2的具体数值;
哈希值h3向左移5位,然后与预先输入的关键字进行加法运算,然后将原始的哈希值向右移2位,将经过加法运算后得到的数值与经过向右移位的哈希值进行加法运算,得到的数值等于哈希值h3的按位异或值,即可计算出所述哈希值h3的具体数值。
3.根据权利要求1或2所述的减少哈希冲突的哈希查找方法,其特征在于,所述h1’ 、h2’以及 h3’三个哈希值为常数整形值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410778520.5A CN104504038A (zh) | 2014-12-15 | 2014-12-15 | 一种减少哈希冲突的哈希查找方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410778520.5A CN104504038A (zh) | 2014-12-15 | 2014-12-15 | 一种减少哈希冲突的哈希查找方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104504038A true CN104504038A (zh) | 2015-04-08 |
Family
ID=52945436
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410778520.5A Pending CN104504038A (zh) | 2014-12-15 | 2014-12-15 | 一种减少哈希冲突的哈希查找方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104504038A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108768656A (zh) * | 2018-04-17 | 2018-11-06 | 无锡科技职业学院 | 一种应用于数据校验的哈希算法 |
CN109165220A (zh) * | 2018-08-09 | 2019-01-08 | 天津威努特信息技术有限公司 | 一种数据匹配计算方法 |
CN110301120A (zh) * | 2017-01-16 | 2019-10-01 | 英特尔公司 | 流分类装置、方法和系统 |
CN116028698A (zh) * | 2022-12-06 | 2023-04-28 | 海南港航物流有限公司 | 一种高效率信息搜索系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101692651A (zh) * | 2009-09-27 | 2010-04-07 | 中兴通讯股份有限公司 | 一种哈希查找表的方法和装置 |
CN104104604A (zh) * | 2013-04-04 | 2014-10-15 | 马维尔以色列(M.I.S.L.)有限公司 | 网络交换机设备中的准确匹配哈希查找数据库 |
-
2014
- 2014-12-15 CN CN201410778520.5A patent/CN104504038A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101692651A (zh) * | 2009-09-27 | 2010-04-07 | 中兴通讯股份有限公司 | 一种哈希查找表的方法和装置 |
CN104104604A (zh) * | 2013-04-04 | 2014-10-15 | 马维尔以色列(M.I.S.L.)有限公司 | 网络交换机设备中的准确匹配哈希查找数据库 |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110301120A (zh) * | 2017-01-16 | 2019-10-01 | 英特尔公司 | 流分类装置、方法和系统 |
CN110301120B (zh) * | 2017-01-16 | 2023-10-10 | 英特尔公司 | 流分类装置、方法和系统 |
US11811660B2 (en) | 2017-01-16 | 2023-11-07 | Intel Corporation | Flow classification apparatus, methods, and systems |
CN108768656A (zh) * | 2018-04-17 | 2018-11-06 | 无锡科技职业学院 | 一种应用于数据校验的哈希算法 |
CN109165220A (zh) * | 2018-08-09 | 2019-01-08 | 天津威努特信息技术有限公司 | 一种数据匹配计算方法 |
CN116028698A (zh) * | 2022-12-06 | 2023-04-28 | 海南港航物流有限公司 | 一种高效率信息搜索系统 |
CN116028698B (zh) * | 2022-12-06 | 2023-08-01 | 海南港航物流有限公司 | 一种高效率信息搜索系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101028470B1 (ko) | Ip주소 검색을 위한 장치 및 방법 | |
Tsuchiya | A search algorithm for table entries with non-contiguous wildcarding | |
CN104866502B (zh) | 数据匹配的方法及装置 | |
Zeng et al. | Research of improved FP-growth algorithm in association rules mining | |
US20080046423A1 (en) | Method and system for multi-character multi-pattern pattern matching | |
CN107153647B (zh) | 进行数据压缩的方法、装置、系统和计算机程序产品 | |
CN104504038A (zh) | 一种减少哈希冲突的哈希查找方法 | |
Suga et al. | Secure keyword search using bloom filter with specified character positions | |
WO2016143405A1 (ja) | 検索装置、検索方法、プログラム、及び記録媒体 | |
CN102045412B (zh) | IPv6地址前缀压缩存储方法及设备 | |
CN108628907A (zh) | 一种用于基于Aho-Corasick的Trie树多关键词匹配的方法 | |
CN104102748B (zh) | 文件映射方法及装置和文件推荐方法及装置 | |
KR20100022565A (ko) | 해시트리를 이용한 url 검색방법 | |
CN106302178B (zh) | 一种路由查询方法及装置 | |
KR101587756B1 (ko) | 블룸 필터 선-검색을 이용한 스트링 정보 검색 장치 및 방법 | |
Kniesburges et al. | Hashed Patricia Trie: Efficient longest prefix matching in peer-to-peer systems | |
US20210279206A1 (en) | Searching for a hash string stored in an indexed array | |
Balamuralikrishna et al. | Fuzzy keyword search over encrypted data in cloud computing | |
CN109657108B (zh) | 一种域名资产数据存储和查询方法和系统 | |
CN115525801A (zh) | 网络安全系统的模式匹配算法 | |
Bahrambeigy et al. | Bloom-Bird: A scalable open source router based on Bloom filter | |
KR102061413B1 (ko) | 오토마타 기반 실시간 확률 패턴 매칭 장치 및 방법 | |
KR20070003488A (ko) | 효율적인 패턴검색을 위한 tcam에서의 정규수식표현방법 및 이를 이용한 패턴 검색방법 | |
JP2018196075A (ja) | 検索装置、検索プログラム、及び検索方法 | |
Kumar et al. | FBF: Bloom Filter for Fuzzy Membership Queries on Strings |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
AD01 | Patent right deemed abandoned | ||
AD01 | Patent right deemed abandoned |
Effective date of abandoning: 20181019 |