序文
ハッシュマップの項を書くための準備です. 誰でも知っていると言われそうだが, 社内教育用のノートにするつもり.ハッシュマップ用ハッシュ関数
ハッシュマップ用のハッシュ関数への要求は, 以下の2つぐらいだろうか.- 高速であること.
- 衝突が少ないこと.
- Bernstein hash function
- Fowler–Noll–Vo hash function (FNV)
- MurmurHash
- xxHash
MurmurHashとxxHashは衝突が少ない. Bernsteinは衝突が多い, FNVはたまに衝突がある.
16バイトだとMurmurHashとxxHashが, Bernstein, FNVより速くなる.
MurmurHashやxxHashなど最近の高速を謳ったハッシュ関数は, 32bitや64bitといった単位で纏めて処理する.
xxHashの方がMurmurHashより高速だが, MurmurHashでも実用として問題ないレベル.
FNVの利点はコード量が小さいこと, メモリが32KBとかの場合役立つかもしれない.
キーが高々数十文字までの文字列のハッシュマップに使う場合の話で, 用途によって使い分ける.
完全ハッシュが前提なら, そうでない場合と違ったハッシュマップ実装も考えられる.
0 件のコメント:
コメントを投稿