[发明专利]基于布谷哈希和布隆过滤器的Hash建表方法有效
| 申请号: | 201810422766.7 | 申请日: | 2018-05-05 |
| 公开(公告)号: | CN108647289B | 公开(公告)日: | 2022-01-21 |
| 发明(设计)人: | 于洪;魏帅;黄雅静;杨镇西;沈剑良;宋克;吕平;刘勤让;张帆;陈博 | 申请(专利权)人: | 中国人民解放军战略支援部队信息工程大学;天津市滨海新区信息技术创新中心 |
| 主分类号: | G06F16/22 | 分类号: | G06F16/22 |
| 代理公司: | 郑州大通专利商标代理有限公司 41111 | 代理人: | 陈勇 |
| 地址: | 450000 河*** | 国省代码: | 河南;41 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 基于 布谷 过滤器 hash 方法 | ||
本发明涉及基于布谷哈希和布隆过滤器的Hash建表方法。本发明将存储空间划分为m个组,每组包含一个存储表和n个过滤表,每个过滤表对应一个Hash函数,共有m*n个不同的Hash函数;另外选取m*n个不同的Hash函数备用;定义一个max_insert值,如果对某次输入数据的操作次数超过所述max_insert值,则表示填表失败。本发明提供的建表方法,有效地提高了空间利用率,利于在有限的硬件存储空间上进行设计开发。且不限制m的取值,m可以取任意设计者认为合适的值,相对于很多传统Hash建表方法来说,具有更高的灵活性。同时,本发明消除了对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函数选取的限制,更加易用。
为了实现上述目的,本发明采用以下技术方案:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国人民解放军战略支援部队信息工程大学;天津市滨海新区信息技术创新中心,未经中国人民解放军战略支援部队信息工程大学;天津市滨海新区信息技术创新中心许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201810422766.7/2.html,转载请声明来源钻瓜专利网。





