私はしばらく私を混乱させていた私の心の中で立ち往生した簡単な質問を持っていました。私の教授は単純にハッシュ関数がキー配列%であると言っていました。これはすべてのハッシュテーブルでこのようにする必要がありますか、それとも私たちが決定するものですか?私たちが実際に作成するハッシュテーブルごとにハッシュ関数を記述していますか?単純に、ハッシュ関数=キーと言うことができます。ハッシュ関数と余り演算子
0
A
答えて
0
一般に、ハッシュ関数のドメインは、その範囲よりもはるかに大きくなります。例えば、ハッシュは「2^64文字以下のすべてのUnicode文字列」を受け入れ、「16ビット数」を出力するかもしれません。
はい、いくつかのアプリケーションでは、ハッシュテーブルが通常の配列と非常によく似ていますが、ハッシュ関数としてID関数を使用することは意味があります。
一般にハッシュテーブルの場合、モジュロ(%
)が良い選択です。計算が簡単で、通常のケースで十分に広がります。しかし、それは暗号的に強力ではなく、多くのアプリケーションでそれが必要です。
0
インデックスで参照される固定サイズの結果を格納する配列があります(質問の場合、0からarray_size-1までの数値を生成するindex = key%array_size)。インデックスが配列のサイズより大きくなると、問題が発生します。それが常に少ない場合、スペースが無駄になり、ハッシュの最終段階は、それが適合しなければならない配列のサイズのモジュロになる傾向があります。
もちろん、これは必ずしも均等に広がるわけではありませんしたがって、のキーを変更して、のモジュロをインデックスとして使用することができます。
関連する問題
- 1. 剰余演算子で奇数と偶数をソートする
- 2. 残りの演算子と関数演算子を関数定義に一緒に使用する方法は?
- 3. 算術演算子と関係演算子
- 4. 関数演算子と環境
- 5. JSfiddleレッスン - 「 - =」下の関数と演算子
- 6. 三項演算子と関数のシグネチャ
- 7. 演算子とフレンド関数のオーバーロード
- 8. 剰余演算子の使い方
- 9. SQLIteに配列関数と演算子がありますか?
- 10. XOR演算子とstd :: ostream演算子
- 11. Xval演算子と比較演算子?
- 12. 共有ポインタ[]演算子と++演算子
- 13. 演算子のオーバーロード:メンバ関数と非メンバ関数の比較?
- 14. BindinUtils.bindPropertyメソッドの関数/三項演算子
- 15. メンバー関数vs演算子オーバーロード
- 16. ブール演算子の関数の構成
- 17. angularjsの比較演算子関数
- 18. 演算子を含む関数テンプレート
- 19. メンバー関数を持つパイプライン演算子
- 20. C++ std :: set Find関数オーバーロード==演算子
- 21. 比較演算子への関数ポインタ
- 22. 関数パラメータ内の等価演算子(==)
- 23. 関数上のドット演算子
- 24. 構造体演算子関数のオーバーロード
- 25. 関数呼び出し演算子
- 26. 匿名関数のOcaml演算子
- 27. 演算子( - - )()演算子C#
- 28. 演算子if演算子
- 29. 算術演算子を関数として扱う
- 30. 乗算演算子をメンバー関数としてオーバーロードする