定本 Cプログラマのためのアルゴリズムとデータ構造 2-2-5
ハッシュ法ですね。
hashing。
解決法は?
キーが衝突したときに、同一のハッシュ値をもつデータをポインタでつないだり、(チェインとかいう)
または、完全に衝突しないようなハッシュ関数を生成したり(完全ハッシュ法とかいう)すればいい。
計算コストは?
通常のはハッシュ関数は基本操作だけで実現できるから、O(1)になる。
ハッシュが衝突し、かつデータの個数が多めになると、衝突の解析にコストがかかる。
コストの発生する原因
コストの大半は衝突や衝突の回避によって生まれる。
よってハッシュ関数の質を高めることがコスト削減につながる。
配列の大きさに対してデータの割合が8割をこえると、
ランダム値によるhashingでは衝突を起こし始める。
そうするとコストがO(1)を超えてしまう。
ハッシュ法は時間と空間のトレードオフ
ハッシュ法はデータ格納領域を十分に用意できる場合には、
関数をそれほど工夫しなくても十分な効果を得られる。
また、関数の選択を正しく行えば、登録や探索のコストを
O(1)に収めたり、近づけたりできる。