5

ハッシュテーブル、辞書などについて読んでいます。私が見たすべての文献とビデオは、ハ​​ッシュテーブルが空間/時間のトレードオフ特性を持つことを暗示しています。

ハッシュテーブルが、同じ数の要素 (値) を持つ配列やリストよりも多くのスペースを占有する理由を理解するのに苦労していますか? ハッシュ化されたキーを実際に保存することと関係がありますか?

私が理解している限り、基本的な用語では、ハッシュテーブルはキー識別子(文字列など)を取り、それをハッシュ関数に渡します。ハッシュ関数は、インデックスを配列または他のデータ構造に吐き出します。オブジェクト (値) を配列またはテーブルに格納するための明白なメモリ使用量とは別に、ハッシュ テーブルがより多くのスペースを使用するのはなぜですか? 明らかな何かが欠けているような気がします...

4

1 に答える 1

2

あなたが言うように、ルックアップ時間とスペースの間のトレードオフがすべてです。基礎となるデータ構造に含まれるスペース (バケット) の数が多いほど、ハッシュ関数が潜在的に各アイテムを格納できる場所の数が増えるため、衝突の可能性が高くなります (したがって、一定時間のパフォーマンスよりも悪くなります)。削減されます。ただし、バケットが増えるということは、明らかに、より多くのスペースが必要になることを意味します。バケット数に対するアイテム数の比率は、負荷係数として知られており、この質問で詳しく説明されています: HashMap での負荷係数の重要性は何ですか?

最小完全ハッシュ関数の場合、n 個のアイテムを n 個のバケット (負荷係数 1) に格納する O(1) パフォーマンスを達成できます。

于 2014-03-19T10:26:17.570 に答える