CN108647289B - 基于布谷哈希和布隆过滤器的Hash建表方法 - Google Patents
基于布谷哈希和布隆过滤器的Hash建表方法 Download PDFInfo
- 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
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冲突的问题而提出,原始算法在插入时,使用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函数,则建表失败。
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)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112416933B (zh) * | 2020-11-19 | 2022-09-23 | 重庆邮电大学 | 一种基于片内片外内存的高性能散列表实现方法 |
Citations (3)
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)
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 |
-
2018
- 2018-05-05 CN CN201810422766.7A patent/CN108647289B/zh active Active
Patent Citations (3)
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)
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 |