CN108647289B - 基于布谷哈希和布隆过滤器的Hash建表方法 - Google Patents

基于布谷哈希和布隆过滤器的Hash建表方法 Download PDF

Info

Publication number
CN108647289B
CN108647289B CN201810422766.7A CN201810422766A CN108647289B CN 108647289 B CN108647289 B CN 108647289B CN 201810422766 A CN201810422766 A CN 201810422766A CN 108647289 B CN108647289 B CN 108647289B
Authority
CN
China
Prior art keywords
hash
addr
input
filling
executing
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
CN201810422766.7A
Other languages
English (en)
Other versions
CN108647289A (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.)
Information Technology Innovation Center Of Tianjin Binhai New Area
Information Engineering University of PLA Strategic Support Force
Original Assignee
Information Technology Innovation Center Of Tianjin Binhai New Area
Information Engineering University of PLA Strategic Support Force
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 Information Technology Innovation Center Of Tianjin Binhai New Area, Information Engineering University of PLA Strategic Support Force filed Critical Information Technology Innovation Center Of Tianjin Binhai New Area
Priority to CN201810422766.7A priority Critical patent/CN108647289B/zh
Publication of CN108647289A publication Critical patent/CN108647289A/zh
Application granted granted Critical
Publication of CN108647289B publication Critical patent/CN108647289B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

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

Abstract

本发明涉及基于布谷哈希和布隆过滤器的Hash建表方法。本发明将存储空间划分为m个组,每组包含一个存储表和n个过滤表,每个过滤表对应一个Hash函数,共有m*n个不同的Hash函数;另外选取m*n个不同的Hash函数备用;定义一个max_insert值,如果对某次输入数据的操作次数超过所述max_insert值,则表示填表失败。本发明提供的建表方法,有效地提高了空间利用率,利于在有限的硬件存储空间上进行设计开发。且不限制m的取值,m可以取任意设计者认为合适的值,相对于很多传统Hash建表方法来说,具有更高的灵活性。同时,本发明消除了对Hash函数选取的限制,更加易用。

Description

基于布谷哈希和布隆过滤器的Hash建表方法
技术领域
本发明属于Hash表算法设计技术领域,尤其涉及基于布谷哈希和布隆过滤器的Hash建表方法。
背景技术
Hash表中文名为哈希表,又叫散列表,它可以提供快速的插入操作和查找操作。使用单个Hash函数构建Hash表,在解决Hash冲突和提高空间利用率或程序效率方面难以有效平衡。
基于多Hash函数的Hash表构建算法因此被发明出来,其中,布谷哈希和布隆过滤器是两种相对高效的算法。
布谷哈希方法是为了解决Hash冲突的问题而提出,原始算法在插入时,使用hash1和hash2 计算对应key 的位置,当两个哈希任意位置为空,则选择一个位置插入;当两个哈希有位置为空时,则插入到空位置;当两个哈希位置均不为空时,随机选择两者之一的位置,将保存在该位置上的值踢出,计算踢出的值的另一个哈希值,在对应的位置进行插入。布谷哈希有两种变形。一种通过增加哈希函数进一步提高空间利用率;另一种是增加哈希表,每个哈希函数对应一个哈希表,每次选择多个表中空余位置进行放置。
它具有占用空间小、查询迅速等特性。布谷哈希的缺点也比较明显,其建表的过程可能因为反复踢出无限循环下去,这时候就需要进行一次循环踢出的限制,超过限制则认为需要进行Rehash,更换Hash函数重新进行计算,这就增加了建表过程的时间开销。一旦采用布谷哈希方法建表成功,查询时间是常数级别。
布隆过滤器具有很好的空间和时间效率,被用来检测一个元素是不是集合中的一个成员,这种检测只会对在集合内的数据错判,而不会对不是集合内的数据进行错判,这样每个检测请求返回有"在集合内(可能错误)"和"不在集合内(绝对不在集合内)"两种情况,布隆过滤器 是牺牲了正确率换取时间和空间。
布隆过滤器优点就是它的是空间简洁和查询方便。使用标准布隆过滤器,增加一个元素到集合,需要进行k次哈希运算(k为哈希函数的个数),其一次元素插入操作的时间复杂度为O(k)。当判断元素是否在集合中时,同样需要进行k次哈希计算,完成一次元素查询的时间复杂度为O(k)。对于n个元素的集合,只需要m位向量V,其空间复杂度为O(m)。使用布隆过滤器完成集合存储,只需要为每个元素平均保存m/n位,十分简洁。另外它查询元素却不保存元素本身,具有良好的安全性。它的缺点也是显而易见的,当插入的元素越多,错判"在集合内"的概率就越大了。
发明内容
本发明针对存在的上述问题,提出基于布谷哈希和布隆过滤器的Hash建表方法,本发明不限制m的取值,m可以取任意设计者认为合适的值,具有更高的灵活性,且消除了对Hash函数选取的限制,更加易用。
为了实现上述目的,本发明采用以下技术方案:
基于布谷哈希和布隆过滤器的Hash建表方法,所述方法将存储空间划分为m个组,每组包含一个存储表和n个过滤表,即共有m个存储表,对应为ST(1)、ST(2)…存储表ST(m);共有m*n个过滤表,对应为FT(11)、FT(12)…FT(1n),FT(21)、FT(22)…FT(2n),…,FT(m1)、FT(m2)…FT(mn);所述存储表的长度为2k,宽度为k比特;所述过滤表的长度为2k,宽度为1比特;每个过滤表对应一个Hash函数,共有m*n个不同的Hash函数,分别为hash(11)、hash(12)…hash(1n),hash(21)、hash(22)…hash(2n),…,hash(m1)、hash(m2)…hash(mn);所述Hash函数用于把输入的数据转换为k比特的定长数据,不同的Hash函数输出数据的长度相同、数值不同;另外选取m*n个不同的Hash函数备用;定义一个max_insert值,如果对某次输入数据的操作次数超过所述max_insert值,则表示填表失败;包括以下步骤:
步骤1:初始化所有表项为0;
步骤2:对于每一个输入Hash_Input,使用第一组Hash函数计算其在存储表1中的插入位置ST(1)[addr(1i)],i∈[1,n],插入存储表1中,如果没有踢出数据,就对下一个输入执行步骤2,如果踢出了数据,执行步骤3;
步骤3:将踢出数据变为新的Hash_Input,使用第二组Hash函数计算出其在存储表2中的插入位置ST(2)[addr(2i)],i∈[1,n],插入存储表2中,如果没有踢出数据,就对下一个输入执行步骤2,如果踢出了数据,执行步骤4;
步骤4:将原存于ST(2)[addr(2n)]中的数据变为新的Hash_Input,并依此法继续处理,若至ST(m)依然没有填充成功,将Hash_Input填入ST(m)[addr(mn)]中,将原存于ST(m)[addr(mn)]中的数据作为新的Hash_Input,执行步骤2;
步骤5:如果步骤2-步骤4重复的次数超过max_insert,则表示无法填充表项,使用备用的Hash函数替换现有Hash函数,执行步骤1;如果已经替换过Hash函数,则建表失败。
进一步地,所述步骤2包括:
步骤2.1:对Hash_Input采用hash(11) 进行计算,获得hash(11)对应位置地址addr(11),读取FT(11)对应位置地址FT(11)[addr(11)],判断FT(11)[addr(11)]是否为0,如果为0,则将FT(11)[addr(11)]置1,将Hash_Input填入ST(1)[addr(11)]中,填充完成,处理新的输入,否则执行步骤2.2;
步骤2.2:对Hash_Input采用hash(12) 进行计算,获得hash(12)对应位置地址addr(12),读取FT(11)及FT(12)对应位置地址FT(11)[addr(12)]及FT(12)[addr(12)],判断FT(11)[addr(12)]及FT(12)[addr(12)]是否为0,如果都为0,则将FT(12)[addr(12)]置1,将Hash_Input填入ST(1)[addr(12)]中,填充完成,处理新的输入,否则执行步骤2.3;
步骤2.3:依次类推,填充完成,处理新的输入,否则执行步骤2.4;
步骤2.4:对Hash_Input采用hash(1n) 进行计算,获得hash(1n)对应位置地址addr(1n),读取FT(11)至FT(1n)对应位置,判断FT(11)[addr(1n)]、FT(12)[addr(1n)]至FT(1n)[addr(1n)]是否为0,如果都为0,则将FT(1n)[addr(1n)]置1,将Hash_Input填入ST(1)[addr(1n)]中,填充完成,处理新的输入,否则,依然将Hash_Input填入ST(1)[addr(1n)]中,执行步骤3。
进一步地,所述步骤3包括:
步骤3.1:将原存于ST(1)[addr(1n)]中的数据作为新的Hash_Input,对Hash_Input采用hash(21) 进行计算,获得地址addr(21),读取FT(21)对应位置,判断FT(21)[addr(21)]是否为0,如果为0,则将FT(21)[addr(21)]置1,将Hash_Input填入ST(2)[addr(21)]中,填充完成,处理新的输入,否则执行步骤3.2;
步骤3.2:对Hash_Input采用hash(22) 进行计算,获得hash(22)对应位置地址addr(22),读取FT(21)及FT(22)对应位置,判断FT(21)[addr(22)]以及FT(22)[addr(22)]是否为0,如果都为0,则将FT(22)[addr(22)]置1,将Hash_Input填入ST(2)[addr(22)]中,填充完成,处理新的输入,否则执行步骤3.3;
步骤3.3:依次类推,填充完成,处理新的输入,否则执行步骤3.4;
步骤3.4:对Hash_Input采用hash(2n) 进行计算,获得hash(2n)对应位置地址addr(2n),读取FT(21)至FT(2n)对应位置,判断FT(21)[addr(2n)]、FT(22)[addr(2n)]至FT(2n)[addr(2n)]是否为0,如果都为0,则将FT(2n)[addr(2n)]置1,将Hash_Input填入ST(2)[addr(2n)]中,填充完成,处理新的输入,否则,依然将Hash_Input填入ST(2)[addr(2n)]中,执行步骤4。
与现有技术相比,本发明具有的有益效果:
本发明提供的建表方法,有效地提高了空间利用率,利于在有限的硬件存储空间上进行设计开发。且其不限制m的取值,m可以取任意设计者认为合适的值,相对于很多传统Hash建表方法来说,具有更高的灵活性。同时,本发明减弱了对Hash函数选取的限制,更加易用。
附图说明
图1为本发明实施例的基于布谷哈希和布隆过滤器的Hash建表方法的基本流程图。
图2为本发明另一实施例的基于布谷哈希和布隆过滤器的Hash建表方法的基本流程图。
具体实施方式
下面结合附图和具体的实施例对本发明做进一步的解释说明:
实施例一:
如图1所示,本发明的一种基于布谷哈希和布隆过滤器的Hash建表方法,所述方法将存储空间划分为m个组,每组包含一个存储表和n个过滤表,即共有m个存储表,对应为ST(1)、ST(2)…存储表ST(m),即对应为存储表1、存储表2…存储表m;共有m*n个过滤表,对应为FT(11)、FT(12)…FT(1n),FT(21)、FT(22)…FT(2n),…,FT(m1)、FT(m2)…FT(mn),即对应为第1组第1个过滤表、第1组第2个过滤表…第1组第n个过滤表,第2组第1个过滤表、第2组第2个过滤表…第2组第n个过滤表,…,第m组第1个过滤表、第m组第2个过滤表…第m组第n个过滤表;所述存储表的长度为2k,宽度为k比特;所述过滤表的长度为2k,宽度为1比特;每个过滤表对应一个Hash函数,共有m*n个不同的Hash函数,分别为hash(11)、hash(12)…hash(1n),hash(21)、hash(22)…hash(2n),…,hash(m1)、hash(m2)…hash(mn),即分别为第1组第1个Hash函数、第1组第2个Hash函数…第1组第n个Hash函数,第2组第1个Hash函数、第2组第2个Hash函数…第2组第n个Hash函数,…,第m组第1个Hash函数、第m组第2个Hash函数…第m组第n个Hash函数;所述Hash函数用于把输入的数据转换为k比特的定长数据,不同的Hash函数输出数据的长度相同、数值不同;另外选取m*n个不同的Hash函数备用;定义一个max_insert值,如果对某次输入数据的操作次数超过所述max_insert值,则表示填表失败;
包括以下步骤:
步骤S101:初始化所有表项为0。
步骤S102:对于每一个输入Hash_Input,使用第一组Hash函数计算其在存储表1中的插入位置ST(1)[addr(1i)],i∈[1,n],插入存储表1中,如果没有踢出数据,就对下一个输入执行步骤S102,如果踢出了数据,执行步骤S103。
步骤S103:将踢出数据变为新的Hash_Input,使用第二组Hash函数计算出其在存储表2中的插入位置ST(2)[addr(2i)],i∈[1,n],插入存储表2中,如果没有踢出数据,就对下一个输入执行步骤S102,如果踢出了数据,执行步骤S104。
步骤S104:将原存于ST(2)[addr(2n)]中的数据变为新的Hash_Input,并依此法继续处理,若至ST(m)依然没有填充成功,将Hash_Input填入ST(m)[addr(mn)]中,将原存于ST(m)[addr(mn)]中的数据作为新的Hash_Input,执行步骤S102。
步骤S105:如果步骤S102-S104重复的次数超过max_insert,则表示无法填充表项,使用备用的Hash函数替换现有Hash函数,执行步骤1;如果已经替换过Hash函数,则建表失败。
实施例二:
如图2所示,本发明的另一种基于布谷哈希和布隆过滤器的Hash建表方法。
所述方法将存储空间划分为m个组,每组包含一个存储表和n个过滤表,有整数 i∈[1,m],整数 j∈[1,n],则存储表的表示为ST(i),过滤表的表示为FT(ij);即共有m个存储表,对应为ST(1)、ST(2)…存储表ST(m),即对应为存储表1、存储表2…存储表m;共有m*n个过滤表,对应为FT(11)、FT(12)…FT(1n),FT(21)、FT(22)…FT(2n),…,FT(m1)、FT(m2)…FT(mn),即对应为第1组第1个过滤表、第1组第2个过滤表…第1组第n个过滤表,第2组第1个过滤表、第2组第2个过滤表…第2组第n个过滤表,…,第m组第1个过滤表、第m组第2个过滤表…第m组第n个过滤表。
其中存储表的长度为2k,宽度为k比特;过滤表的长度也为2k,宽度为1比特。故该方法占用空间为m*2k*k + m*n*2k = m*2k*(k+n) 比特。
每个过滤表对应一个Hash函数,共有m*n个不同的Hash函数,该方法每个过滤表对应一个Hash函数,因此需要采用m*n个不同的Hash函数,Hash函数的编号与其对应的过滤表相同,表示为hash(ij)。分别为hash(11)、hash(12)…hash(1n),hash(21)、hash(22)…hash(2n),…,hash(m1)、hash(m2)…hash(mn),即分别为第1组第1个Hash函数、第1组第2个Hash函数…第1组第n个Hash函数,第2组第1个Hash函数、第2组第2个Hash函数…第2组第n个Hash函数,…,第m组第1个Hash函数、第m组第2个Hash函数…第m组第n个Hash函数;这些Hash函数要求能把输入的数据转换为k比特的定长数据,不同的Hash函数输出数据的长度相同、数值不同;另外选取m*n个不同的Hash函数备用。
该方法采用递归方式调用,存在极小的失败概率,设置一个最大调用值,记为max_insert,当方法中的对某次输入数据的操作次数超过max_insert时,则认为建表失败。
输入数据在本发明中记为Hash_Input。
包括以下步骤:
步骤S201:初始化所有表项为0,所述表项包括m个存储表及m*n个过滤表;
步骤S202:对于每一个输入Hash_Input,使用第一组Hash函数计算其在存储表1中的插入位置ST(1)[addr(1i)],i∈[1,n],插入存储表1中,如果没有踢出数据,就对下一个输入执行步骤S202,如果踢出了数据,执行步骤S203;所述步骤S202包括:
步骤S2021:对Hash_Input采用hash(11) 进行计算,获得hash(11)对应位置地址addr(11),读取FT(11)对应位置地址FT(11)[addr(11)],判断FT(11)[addr(11)]是否为0,如果为0,则将FT(11)[addr(11)]置1,将Hash_Input填入ST(1)[addr(11)]中,填充完成,处理新的输入,否则执行步骤S2022;
步骤S2022:对Hash_Input采用hash(12) 进行计算,获得hash(12)对应位置地址addr(12),读取FT(11)及FT(12)对应位置地址FT(11)[addr(12)]及FT(12)[addr(12)],判断FT(11)[addr(12)]及FT(12)[addr(12)]是否为0,如果都为0,则将FT(12)[addr(12)]置1,将Hash_Input填入ST(1)[addr(12)]中,填充完成,处理新的输入,否则执行步骤S2023;
步骤S2023:依次类推,填充完成,处理新的输入,否则进入步骤S2024;
步骤S2024:对Hash_Input采用hash(1n) 进行计算,获得hash(1n) 对应位置地址addr(1n),读取FT(11)至FT(1n)对应位置,判断FT(11)[addr(1n)]、FT(12)[addr(1n)]至FT(1n)[addr(1n)]是否为0,如果都为0,则将FT(1n)[addr(1n)]置1,将Hash_Input填入ST(1)[addr(1n)]中,填充完成,处理新的输入,否则,依然将Hash_Input填入ST(1)[addr(1n)]中,执行步骤S203。
步骤S203:将踢出数据变为新的Hash_Input,使用第二组Hash函数计算出其在存储表2中的插入位置ST(2)[addr(2i)],i∈[1,n],插入存储表2中,如果没有踢出数据,就对下一个输入执行步骤S202,如果踢出了数据,执行步骤S204;所述步骤S203包括:
步骤S2031:将原存于ST(1)[addr(1n)]中的数据作为新的Hash_Input,对Hash_Input采用hash(21) 进行计算,获得地址addr(21),读取FT(21)对应位置,判断FT(21)[addr(21)]是否为0,如果为0,则将FT(21)[addr(21)]置1,将Hash_Input填入ST(2)[addr(21)]中,填充完成,处理新的输入,否则执行步骤S2032;
步骤S2032:对Hash_Input采用hash(22) 进行计算,获得hash(22) 对应位置地址addr(22),读取FT(21)及FT(22)对应位置,判断FT(21)[addr(22)]以及FT(22)[addr(22)]是否为0,如果都为0,则将FT(22)[addr(22)]置1,将Hash_Input填入ST(2)[addr(22)]中,填充完成,处理新的输入,否则执行步骤S2033;
步骤S2033:依次类推,填充完成,处理新的输入,否则执行步骤S2034;
步骤S2034:对Hash_Input采用hash(2n) 进行计算,获得hash(2n) 对应位置地址addr(2n),读取FT(21)至FT(2n)对应位置,判断FT(21)[addr(2n)]、FT(22)[addr(2n)]至FT(2n)[addr(2n)]是否为0,如果都为0,则将FT(2n)[addr(2n)]置1,将Hash_Input填入ST(2)[addr(2n)]中,填充完成,处理新的输入,否则,依然将Hash_Input填入ST(2)[addr(2n)]中,执行步骤S204。
步骤S204:将原存于ST(2)[addr(2n)]中的数据变为新的Hash_Input,并依此法继续处理,若至ST(m)依然没有填充成功,将Hash_Input填入ST(m)[addr(mn)]中,将原存于ST(m)[addr(mn)]中的数据作为新的Hash_Input,执行步骤S202;
步骤S205:如果步骤S202-S204重复的次数超过max_insert,则表示无法填充表项,使用备用的Hash函数替换现有Hash函数,执行步骤S201;如果已经替换过Hash函数,则建表失败。
值得说明的是,本发明的不同的Hash函数可以通过现有的规范进行选取,也可以通过自己设定的规则进行选取,针对不同的输入数据集不需要花费大量的时间查找对应的、最优的Hash函数序列。
以上所示仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (1)

1.基于布谷哈希和布隆过滤器的Hash建表方法,其特征在于,所述方法将硬件存储空间划分为m个组,每组包含一个存储表和n个过滤表,即共有m个存储表,对应为ST(1)、ST(2)…存储表ST(m);共有m*n个过滤表,对应为FT(11)、FT(12)…FT(1n),FT(21)、FT(22)…FT(2n),…,FT(m1)、FT(m2)…FT(mn);所述存储表的长度为2k,宽度为k比特;所述过滤表的长度为2k,宽度为1比特;每个过滤表对应一个Hash函数,共有m*n个不同的Hash函数,分别为hash(11)、hash(12)…hash(1n),hash(21)、hash(22)…hash(2n),…,hash(m1)、hash(m2)…hash(mn);所述Hash函数用于把输入的数据转换为k比特的定长数据,不同的Hash函数输出数据的长度相同、数值不同;另外选取m*n个不同的Hash函数备用;定义一个max_insert值,如果对某次输入数据的操作次数超过所述max_insert值,则表示填表失败;包括以下步骤:
步骤1:初始化所有表项为0;
步骤2:对于每一个输入Hash_Input,使用第一组Hash函数计算其在存储表1中的插入位置ST(1)[addr(1i)],i∈[1,n],插入存储表1中,如果没有踢出数据,就对下一个输入执行步骤2,如果踢出了数据,执行步骤3;
所述步骤2包括:
步骤2.1:对Hash_Input采用hash(11) 进行计算,获得hash(11)对应位置地址addr(11),读取FT(11)对应位置地址FT(11)[addr(11)],判断FT(11)[addr(11)]是否为0,如果为0,则将FT(11)[addr(11)]置1,将Hash_Input填入ST(1)[addr(11)]中,填充完成,处理新的输入,否则执行步骤2.2;
步骤2.2:对Hash_Input采用hash(12) 进行计算,获得hash(12)对应位置地址addr(12),读取FT(11)及FT(12)对应位置地址FT(11)[addr(12)]及FT(12)[addr(12)],判断FT(11)[addr(12)]及FT(12)[addr(12)]是否为0,如果都为0,则将FT(12)[addr(12)]置1,将Hash_Input填入ST(1)[addr(12)]中,填充完成,处理新的输入,否则执行步骤2.3;
步骤2.3:依次类推,填充完成,处理新的输入,否则执行步骤2.4;
步骤2.4:对Hash_Input采用hash(1n) 进行计算,获得hash(1n)对应位置地址addr(1n),读取FT(11)至FT(1n)对应位置,判断FT(11)[addr(1n)]、FT(12)[addr(1n)]至FT(1n)[addr(1n)]是否为0,如果都为0,则将FT(1n)[addr(1n)]置1,将Hash_Input填入ST(1)[addr(1n)]中,填充完成,处理新的输入,否则,依然将Hash_Input填入ST(1)[addr(1n)]中,执行步骤3;
步骤3:将踢出数据变为新的Hash_Input,使用第二组Hash函数计算出其在存储表2中的插入位置ST(2)[addr(2i)],i∈[1,n],插入存储表2中,如果没有踢出数据,就对下一个输入执行步骤2,如果踢出了数据,执行步骤4;
所述步骤3包括:
步骤3.1:将原存于ST(1)[addr(1n)]中的数据作为新的Hash_Input,对Hash_Input采用hash(21) 进行计算,获得地址addr(21),读取FT(21)对应位置,判断FT(21)[addr(21)]是否为0,如果为0,则将FT(21)[addr(21)]置1,将Hash_Input填入ST(2)[addr(21)]中,填充完成,处理新的输入,否则执行步骤3.2;
步骤3.2:对Hash_Input采用hash(22) 进行计算,获得hash(22)对应位置地址addr(22),读取FT(21)及FT(22)对应位置,判断FT(21)[addr(22)]以及FT(22)[addr(22)]是否为0,如果都为0,则将FT(22)[addr(22)]置1,将Hash_Input填入ST(2)[addr(22)]中,填充完成,处理新的输入,否则执行步骤3.3;
步骤3.3:依次类推,填充完成,处理新的输入,否则执行步骤3.4;
步骤3.4:对Hash_Input采用hash(2n) 进行计算,获得hash(2n)对应位置地址addr(2n),读取FT(21)至FT(2n)对应位置,判断FT(21)[addr(2n)]、FT(22)[addr(2n)]至FT(2n)[addr(2n)]是否为0,如果都为0,则将FT(2n)[addr(2n)]置1,将Hash_Input填入ST(2)[addr(2n)]中,填充完成,处理新的输入,否则,依然将Hash_Input填入ST(2)[addr(2n)]中,执行步骤4;
步骤4:将原存于ST(2)[addr(2n)]中的数据变为新的Hash_Input,并依此法继续处理,若至ST(m)依然没有填充成功,将Hash_Input填入ST(m)[addr(mn)]中,将原存于ST(m)[addr(mn)]中的数据作为新的Hash_Input,执行步骤2;
步骤5:如果步骤2-步骤4重复的次数超过max_insert,则表示无法填充表项,使用备用的Hash函数替换现有Hash函数,执行步骤1;如果已经替换过Hash函数,则建表失败。
CN201810422766.7A 2018-05-05 2018-05-05 基于布谷哈希和布隆过滤器的Hash建表方法 Active CN108647289B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810422766.7A CN108647289B (zh) 2018-05-05 2018-05-05 基于布谷哈希和布隆过滤器的Hash建表方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810422766.7A CN108647289B (zh) 2018-05-05 2018-05-05 基于布谷哈希和布隆过滤器的Hash建表方法

Publications (2)

Publication Number Publication Date
CN108647289A CN108647289A (zh) 2018-10-12
CN108647289B true CN108647289B (zh) 2022-01-21

Family

ID=63749563

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810422766.7A Active CN108647289B (zh) 2018-05-05 2018-05-05 基于布谷哈希和布隆过滤器的Hash建表方法

Country Status (1)

Country Link
CN (1) CN108647289B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112416933B (zh) * 2020-11-19 2022-09-23 重庆邮电大学 一种基于片内片外内存的高性能散列表实现方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101556610A (zh) * 2009-05-04 2009-10-14 中兴通讯股份有限公司 网络处理器使用的建表和查表方法
CN103294822A (zh) * 2013-06-17 2013-09-11 北京航空航天大学 一种基于主动哈希和布隆过滤器的高效缓存方法
CN105630955A (zh) * 2015-12-24 2016-06-01 华中科技大学 一种高效动态的数据集合成员管理方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8990243B2 (en) * 2011-11-23 2015-03-24 Red Hat, Inc. Determining data location in a distributed data store

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101556610A (zh) * 2009-05-04 2009-10-14 中兴通讯股份有限公司 网络处理器使用的建表和查表方法
CN103294822A (zh) * 2013-06-17 2013-09-11 北京航空航天大学 一种基于主动哈希和布隆过滤器的高效缓存方法
CN105630955A (zh) * 2015-12-24 2016-06-01 华中科技大学 一种高效动态的数据集合成员管理方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
"Bloom Filter Optimization using Cuckoo Search";Arulanand Natarajan;《2012 International Conference on Computer Communication and Informatics (ICCCI -2012) 》;20120301;全文 *
"基于布谷鸟过滤器的外连接算法";于洋等;《华东师范大学学报(自然科学版)》;20170930(第5期);全文 *

Also Published As

Publication number Publication date
CN108647289A (zh) 2018-10-12

Similar Documents

Publication Publication Date Title
US10706101B2 (en) Bucketized hash tables with remap entries
CN107622020B (zh) 一种数据存储方法、访问方法及装置
CN109766341B (zh) 一种建立哈希映射的方法、装置、存储介质
CN106326475B (zh) 一种高效的静态哈希表实现方法及系统
US6353910B1 (en) Method and apparatus for implementing error correction coding (ECC) in a dynamic random access memory utilizing vertical ECC storage
CN110489405B (zh) 数据处理的方法、装置和服务器
CN111971931B (zh) 在区块链网络中验证交易的方法以及构成该网络的节点
US20150070957A1 (en) Semiconductor device and method of writing/reading entry address into/from semiconductor device
CN105117355A (zh) 存储器、存储器系统及其数据处理方法
KR102316271B1 (ko) 데이터 저장장치의 주소 맵핑 테이블 운용 방법
CN111625534A (zh) 用于哈希运算的数据结构及基于该结构的哈希表存储、查询方法
CN102662855B (zh) 一种二叉树的存储方法、系统
CN111858651A (zh) 一种数据处理方法以及数据处理装置
CN104299637A (zh) 快闪存储器装置及其运作方法
CN104102586A (zh) 一种地址映射处理的方法、装置
US20240063800A1 (en) Hierarchical statisically multiplexed counters and a method thereof
CN111930923B (zh) 布隆过滤器系统及过滤方法
WO2020135209A1 (zh) 减少存储体冲突的方法
CN108647289B (zh) 基于布谷哈希和布隆过滤器的Hash建表方法
CN111930924A (zh) 基于布隆过滤器的数据查重系统及方法
KR20170065374A (ko) 버킷 단위의 정렬을 기반으로 하는 해시 충돌 처리 방법
Li et al. Deterministic and efficient hash table lookup using discriminated vectors
CN108984780B (zh) 基于支持重复键值树数据结构管理磁盘数据的方法和装置
CN113630123A (zh) 一种数据压缩系统及方法
US10175913B2 (en) Link management method and physical device

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