1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ハッシュマップ!トレンド!2024年版

Last updated at Posted at 2024-06-03

近年1、ハッシュマップの実装トレンドとしてキャッシュフレンドリーなオープンアドレス法が隆盛を極めているっぽいふいんき(なぜか変換できない)を感じているがちゃんと調べたことなかったなと思ったので、かなり雑に調べてまとめてみました。

性能比較とかはしてないので自分でベンチマークとってください。

チェーン法派閥

  • 今となっては少数派

C++ std::unordered_map

  • std::unordered_map
    • バイナリ互換を維持しないとならないので高速化がむずかしい
      • 後述のswiss tables(abseil)が開発される原因となった

オープンアドレス法派閥

  • 勢いがある

SwissTable派閥

Abseil(C++)

Rust

  • std::collections::HashMap
  • 実体はhashbrown
    • quadratic probing (triangular numbers)
  • ハッシュ関数
    • 標準ライブラリはSipHash 1-3 (HashDOS対策)
    • hashbrownはahash

Go

Robin-hood probing派閥

  • robin-hoodはたんなるprobingの手法だがここにまとめる

ankerl::unordered_dense::map(C++)

V言語

PyPy派閥

Python

Ruby派閥

Ruby

  • Open Addressing (Pythonと似た感じの)
  • probingはlinearっぽい
  • ハッシュ関数はSipHash 1-3(HashDOS対策)だが、一部内部実装により高速なFNVやMurMurHash3を使っているらしい
  • PyPy派閥としてくくってもよいかもしれない?

Crystal

quadratic + tombstone派閥

  • robin-hood同様probingの手法
    • 以下のような実装
      • 1ループ目: hash & mask
      • 2ループ目: ((hash & mask) + 1) & mask = 1進む
      • 3ループ目: ((((hash & mask) + 1) & mask) + 2) & mask = 2進む

D言語

Linear Probing + back shift deletion派閥

Nim

Zig派閥

Zig

  • SwissTableを改変したものらしい?
    • New hashmap implementation
    • linear probing + tombstoneっぽくみえる
    • metadataの持ち方はそうだけどグループ単位で並列にチェックしてないからあんま意味なくないか?
  • ハッシュ関数はwyhashを採用

まとめ?

いかがでしたか!!??!???

  • 性能的な理由によってオープンアドレス法を採用しているものが増えてきている
  • オープンアドレス法と一口にいっても意外と実装には独自性がある
  • やたらwyhashが人気ある

といったあたりがうかがえたかなと思います。

参考資料

  1. いつ?????

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?