我试图学习如何使用多重散列来匹配给定文本字符串中的模式。我在java中找到了以下实现:
void multiHashing() {
int counter = 0;
int d = 26;
int r = 10;
int [] qP = qPrimes(d,r); // stores 10 prime numbers
long [] P = new long[r];
long [] T = new long[r];
long [] H = new long[r];
for (int k=0;k<r;k++) {
H[k] = mod(((long) Math.pow(d, m-1)), qP[k]);
for (int i=0;i<m;i++) {
P[k] = mod((d*P[k] + ((int)pattern.charAt(i) - 97)), qP[k]); //what has been done here
T[k] = mod((d*T[k] + ((int)text.charAt(i) - 97)), qP[k]);
}
}
for (int s=0;s<=n-m;s++) {
if (isEqual(P,T)) {
out.println(s);
counter++;
}
if (s < n-m) {
for (int k=0;k<r;k++)
T[k] = mod(d*(T[k] - ((int)text.charAt(s) - 97)*H[k]) + ((int)text.charAt(s+m) - 97), qP[k]); // what has been done here?
}
}
}
问题是:我无法理解上面代码中我在代码中注释掉的某些行。这些行实际上做了什么?