java - 我需要修改这些哈希函数,以便它给出 0<x<10^9 范围内的值

标签 java algorithm data-structures bloom-filter

我试图在 java 中实现布隆过滤器,但问题是散列函数返回的值在 -10^20 范围内

public long APHash(String str)
{
    long hash = 0xAAAAAAAA;
    for(int i = 0; i < str.length(); i++)
    {
        if ((i & 1) == 0)
        {
            hash ^= ((hash << 7) ^ str.charAt(i) * (hash >> 3));
        }
        else
             {
            hash ^= (~((hash << 11) + str.charAt(i) ^ (hash >> 5)));
        }
    }
    return hash;
}

最佳答案

补充一下 Cinnam 的评论,您不需要数组,因为那是占用大量内存的方式,正如您指出的那样,您达到了极限。一个 Map 是理想的,其中键是 bloom 函数的输出值。 Map 只会增长以满足其中的条目数量,而不会通过使用数组会导致的 10^20 bloom 输出来填充可能的条目数量。

最后一个问题是使用什么作为 key 。您可以使用 String、long 或 BigInteger。 Map 的值将是一个 boolean 值。

编辑:为了满足 O(1) 的要求,HashMap 比 TreeMap 更受欢迎,但如果您只有一个条目,这真的无关紧要。

关于java - 我需要修改这些哈希函数,以便它给出 0<x<10^9 范围内的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32918693/

相关文章:

php - 令人困惑的 PHP BCrypt 实现

Python 递归回溯数独求解器

python - 如何使用 defaultdict 行为扩展 OrderedDict

java - 在二维数组中生成唯一的行和列

java - JCalendar设置特定日期颜色

algorithm - a 的 b 次方 - 递归算法

c++ - 段错误 - 已使用新的和删除的。在运行时正在创建大量数组(无界数组)

c# - 对象的哈希值如何存储在字典中?

java - 使用 selenium 网络驱动程序复制浏览器 session

Java - 在网站上查找特定号码