Rabin-Karp アルゴリズムの効率的なハッシュ関数を探しています。これが私の実際のコードです(Cプログラミング言語)。
static bool f2(char const *const s1, size_t const n1,
char const *const s2, size_t const n2)
{
uintmax_t hsub = hash(s2, n2);
uintmax_t hs = hash(s1, n1);
size_t nmax = n2 - n1;
for (size_t i = 0; i < nmax; ++i) {
if (hs == hsub) {
if (strncmp(&s1[i], s2, i + n2 - 1) == 0)
return true;
}
hs = hash(&s1[i + 1], i + n2);
}
return false;
}
Rabin-Karp C の実装をいくつか検討しましたが、すべてのコードに違いがあります。私の質問は、Rabin-Karp ハッシュ関数が持つべき特性は何ですか?