-5

stringHash1 を使用すると同じ値にハッシュされ、stringHash2 を使用すると異なる値にハッシュされる 2 つの単語の例を挙げてください。

私の答えは車とカメラです。最初の 2 文字は同じ ascii 値ですが、不明なのでしょうか?

int stringHash1(char * str)
{
    int i;
    int r = 0;
    for (i = 0; str[i] != '\0'; i++)
        r += str[i];
    return r;
}

/*the second hashing function you can use*/
int stringHash2(char * str)
{
    int i;
    int r = 0;
    for (i = 0; str[i] != '\0'; i++)
        r += (i+1) * str[i];
    return r;
}
4

1 に答える 1

2

最初の関数は文字値のみを追加します。つまり、文字列を反転 (または文字を再配置) しても効果はありません。もう 1 つは、ハッシュ値を生成する際に各文字のインデックスも含み、並べ替えに対する回復力を高めます。

そう:

hash1(ab) = 195
hash1(ba) = 195
hash2(ab) = 293
hash2(ba) = 292
于 2013-05-27T03:20:15.480 に答える