本文主要是介绍哈希扩展之布隆过滤器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1. 布隆过滤器的引入
有这样一个题:判断一个元素是不是在其指定集合中?
我们一般的操作是将该集合先保存起来,再拿着指定元素与保存起来的集合中元素一一比较从而判断它是否存在。可是随着集合中元素的增加,我们需要的存储空间越来越大,检索的速度也越来越慢,这时我们想到了哈希表这种数据结构。哈希表通过一个哈希函数将一个元素映射成位阵列(Bit Array)中的一个点,这样我们只要查看该元素对应的点是否为1就可以知道这个集合中是否存在它。但是哈希表面临哈希冲突的问题,假设我们的位阵列长度为m个点,那么如果要将哈希冲突降低为1%,即在哈希表中保存n个元素需要满足:n/m<1%,则这个哈希表只能容纳m/100个元素。但是这样做的话,仅仅是提高了检索的速度,内存空间做不到有效存储,那么应该怎么解决呢?其实,我们可以利用多个Hash函数解决哈希冲突问题,如果有一个Hash函数计算出该元素不在指定集合中,则不是真的不存在;如果所有哈希函数均计算出该元素在指定集合中,则表示极有可能存在,这样一来就大大解决了哈希冲突问题。
而一般使用布隆过滤器是用来处理字符串是否存在在集合中问题,通过多个哈希函数计算出该字符串的多个哈希值,从而将该字符串对应的所有哈希值对应的bit位设置为1。利用这样的方式对字符串进行查找时,通过多个哈希表计算哈希值,并在哈希值对应的bit位中判断该bit位是否为1,若全为1则表示该字符串是存在的,若有一个哈希函数对应的哈希值的bit位为0则表示该字符串不存在。但是需要注意的是布隆过滤器不能进行删除操作,因为该字符串对应的bit位有可能是其他字符串也对应的bit位,故不可以进行删除操作。
2. 布隆过滤器的结构体定义
通过上面分析布隆过滤器的
这篇关于哈希扩展之布隆过滤器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!