ハッシュ関数分類


9

インターネットで、私はこの質問に遭遇しました:

キー値を見つけるさまざまな方法に基づいてハッシュ関数を分類します。

のような答えで

  • 直接法
  • 減算方式
  • Modulo-Divisionメソッド
  • 桁抽出法
  • ミッドスクエア法
  • 折り方
  • 疑似ランダム法

奇妙だと思います。私はハッシュについてはよく知っていると思いますが、これは私には意味不明なことです。誰かが説明できますか?

回答:


4

これらは、ハッシュコードを、値を含む配列のインデックスに変換する方法です。0x12345678のハッシュコードがあるとします。非常に大きな数であり、このサイズの配列を持つことはほとんどありません。あなたがするなら、あなたはただすることができます

Value = array[0x12345678];

そして、行われます(直接法)。

そうしないと、衝突を回避しつつ、この値を配列サイズに適合する値に変換する方法がわかります。使用されている用語はおそらく他の名前でも知られていますが、たとえば、ハッシュコードの上位ビットをマスクすることができます

Value = array[hashcode & 0xffff];

または、配列サイズに対してハッシュコードを変更します

Value = array[hashcode % array.size()]; // modulo division

など

編集:このリンクが役立つ場合があります


ありがとう、それだけです-リンクがこの***のソースのようです。1.キーからhashCodeを計算する(例:フォールドアンドアド)、2。ハッシュを改善する(=塗りつぶす)、(例:正方形の中央)、3。マッピングインデックスへのハッシュ(たとえば、係数、「&」)。
maaartinus
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.