我的程序是布隆过滤器的实现。但是,当我将哈希函数结果存储在位数组中时,该函数(form f(i) = (a*i + b) % m
其中 a、b、i、m 都是正整数)给了我一个否定的结果。问题似乎在于 a*i 的计算结果为负。
忽略代码中的打印语句;那些是用于调试的。基本上,这段代码中 temp 的值是负数,所以我得到一个ArrayOutOfBoundsException
.
m
是位数组长度,z
是正在使用的散列函数的数量,S
是作为布隆过滤器成员的值的集合,并H
存储散列函数 f1、f2、...、fz 的 a 和 b 的值。
public static int[] makeBitArray(int m, int z, ArrayList<Integer> S, int[] H)
{
int[] C = new int[m];
for (int i = 0; i < z; i++)
{
for (int q = 0; q < S.size() ; q++)
{
System.out.println(H[2*i]);
int temp = S.get(q)*(H[2*i]);
System.out.println(temp);
System.out.println(S.get(q));
System.out.println(H[2*i + 1]);
System.out.println(m);
int t = ((H[2*i]*S.get(q)) + H[2*i + 1])%m;
System.out.println(t);
C[t] = 1;
}
}
return C;
}