YOYUハッシュテーブルの最適化:mod前ハッシュ値の活用
表示
YOYUのハッシュテーブルでは、各エントリ(HashCell)に mod を取る前のフルハッシュ値を保持している。この情報を活用することで、検索性能を大幅に向上させることができる。
背景
[編集]通常のハッシュテーブルでは、衝突が発生したバケットに複数のエントリが存在する場合、それらの文字列同士をベタ比較(strcmp等)して一致を確認する。しかし、文字列比較は遅く、特に大量のエントリがあると性能が劣化する。
アイデアの核心
[編集]HashCell に保存された "mod 前のハッシュ値" を使い、まず整数比較で候補を絞り込む:
if (hash(key) == cell->hash) { // 次に文字列比較を行う }
このようにすることで、ベタ比較を避けられるケースが多くなり、検索全体の速度が大幅に向上する。
実装上の利点
[編集]整数比較はわずか1クロック程度のコストで済む。
バケットサイズを大きめ(10件以上)にしても実用的。
比較の段階化により、衝突の影響を受けにくい設計となる。
YOYU の最小実装主義に反しない。
拡張の可能性
[編集]ハッシュ関数のビット幅(32bitや64bit)を増やすことで衝突率をさらに下げる。
将来的には固定サイズではなくリンクリスト型バケットとの比較評価も可能。
まとめ
[編集]この最適化は、YOYU におけるデータ構造設計において「最小構成で最大効果を狙う」理念にかなっている。mod前ハッシュ値の保存というごく小さな工夫が、ハッシュテーブル全体の効率とスケーラビリティを飛躍的に高める鍵となる。