2

Coursera のビデオの 1 つでは、Rabin-Karp のローリング ハッシュ ( http://en.wikipedia.org/wiki/Rolling_hash ) が次のように示されています。

public static long getHash(String S)
{
    long H = 0;

    for (int i = 0; i < S.length(); i++)
        H = (H * 10 + S.charAt(i)) % 997;

    return H;
}

それは間違っていると思います。私はそれがあるべきだと思います:

public static long getHash(String S)
{
    long H = 0;

    for (int i = 0; i < S.length(); i++)
        H = (S.charAt(i) * (int)Math.pow(10, (S.length() - i - 1)) + H) % 997;

    return H;
}

どれが正しいですか、なぜですか?

4

1 に答える 1