複数のハッシュを使用して、特定のテキスト文字列のパターンを一致させる方法を学ぼうとしていました。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?
}
}
}
問題は次のとおりです。コードでコメントアウトした上記のコードの一部の行を理解できません。それらの行で実際に何が行われたのでしょうか?