文字列を 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 のように、ハッシュ値を均等に分散します)。 、またはそのようなもの)。