今天公众号看到一个将布隆过滤器的原理。瞄了一眼,还是比较好理解的,自己在这记录一下。
问题是如何判断一个url是否在在20亿的url黑名单中?需在给定内存空间内(比如500M)内快速判断出。
判断方法最快,当然是用hash算法。但是如何才能占用空间最小呢?
布隆算法的做法是创建一个byte数组,用1bit代表一个hash值
比如www.baidu.com 求hash求出来为2,就判断一个第二位(就是byte数组为0下标的第二位)是否为1。
复杂点的,可以计算出多个hash值,然后分别取验证对应的位数是否1。
也正是因为如此,所以会有重复,会有误判。同时基本不可能实现删除的功能,因为一个位置可能对应着多个url。
还有一点数组的大小也很影响性能,过小会导致大量重复,过大会导致计算hash变困难。
具体的可以看大佬的分析,详解布隆过滤器的原理、使用场景和注意事项
转载于:https://www.cnblogs.com/duangL/p/11581253.html