0

文字列を double に変換する単純なハッシュ関数 (と呼べる場合) を作成しました。

最初の文字の値を取得して double にキャストし、次の文字のコサインを掛けてから、次の文字のコサインを掛けて...というように機能します。

これは機能です:

double hash (string str) {
    double hash = (double)str[0];

    for (int i = 1; i < str.length(); i++) {
        hash *= cos((double)str[i]);
    }

    return hash;
}

では、この関数で衝突の確率を計算するにはどうすればよいでしょうか?

1 - e^(k(k-1)/(2k)) になる式を 1 つ見つけましたが、私が読んだところによると、ハッシュ関数が適切な関数である場合にのみ機能します (適切な RNG のように、ハッシュ値を均等に分散します)。 、またはそのようなもの)。

4

1 に答える 1