【发布时间】:2018-12-29 20:53:08
【问题描述】:
我需要创建两个独立的哈希函数来在java中实现一个布隆过滤器。
这两个哈希函数 h_1(x) 和 h_2(x) 将用于在需要时模拟额外的哈希函数。
我了解如何创建这样的基本哈希函数:
散列函数h(x) = x mod M,其中M代表散列表大小,是一个素数。
给定一个包含字符 c_i 的字符串 x : x c_1, c_2, ... , c_n, x = c_1.c_2.c_3...c_n (. 表示连接)
每个字符将被转换为 ASCII 码 E{0, .. ,127},然后在此处为每个字符乘以不同的常数 128^n-1 到 128^0。
这样包含不同顺序的相同字符的字符串不会散列到相同的值。
x = c_1*128^n-1 + c_2*128^n-2 + ... + c_n*128^0
如何创建独立于这个的第二个哈希函数?
改变常数就足够了吗?
如何验证它们确实是独立的?
【问题讨论】:
-
我认为这里的“独立”是指一个人不调用另一个人。
-
你能解释一下“独立”是什么意思吗?要提出一个直截了当的答案,请使用multiple available 中的任意两个哈希函数。
-
@displayName 我在 Reddit 上问过同样的问题,有人告诉我,函数在定义上是独立的。如果这是正确的,我认为这仅意味着两个不同的哈希函数,在这种情况下,您的提议似乎是正确的。
-
见stackoverflow.com/a/24685697/56778。当我使用 Bloom 过滤器时,这种技术效果很好。
-
请创建问题的MVCE,以便其他人可以最好地帮助您。
标签: java data-structures hash bloom-filter