(乗法)ハッシュ関数で使用する乗数の選択に関する助言/規則はありますか?この関数は文字列のハッシュ値を計算します。(文字列)ハッシュ関数の乗数の選択
12
A
答えて
3
あなたのセットのサイズに比例するものを使いたいと思っています。そうすれば、ループしたときに、ちょうどあなたが試みたのと同じ数字に終わることはありません。
1
歴史的には33が一般的な選択のように思えますが、それはかなりうまくいく傾向があります。誰も理由は分かりません。詳細については、look here
2
最近、ハッシュ関数に関する同僚と面白い議論がありました。
標準の言語で使用できるデフォルトの実装よりも衝突を最小限に抑える優れたハッシュ関数を書く必要がある場合は、数学で高度な学位が必要です。
カスタムハッシュ関数がアプリケーションのパフォーマンスを大幅に向上させるアプリケーションを作成しているなら、あなたはGoogleであり、たくさんの数学博士がその作業を行うことができます。
ご質問に直接お答えして申し訳ありませんが、結論としては、文字列に独自のハッシュ関数を書く必要はありません。どの言語で作業していますか?私は "十分に良い"ハッシュコードを計算する簡単な方法があると思います。
次のページには、効率的で最小の衝突を示す汎用ハッシュ関数の実装がいくつかあります。http://partow.net/programming/hashfunctions/index.html –