ハッシュテーブルについて学び始めたばかりで、挿入方法は理解していますが、検索方法は理解していません。これらは、この質問の基になるアルゴリズムです。
キーのハッシュ
int Hash (int key) {
return key % 10; //table has a max size of 10
}
衝突解決のための線形プローブ。
キー 1、11、および 21 を使用して insert を 2 回呼び出すとします。これにより、3 つのキーすべてに対してスロット 1 が返されます。衝突の解決後、テーブルはスロット 1、2、および 3 で値 1、11、および 21 を持ちます。これは、挿入についての私の理解では起こると思います。
これを行った後、キー 11 と 21 を検索すると、どうすればスロット 2 と 3 を取得できますか? 私が読んだことから、ハッシュテーブルの検索は、目的のスロットに到達したときに、何かを挿入する代わりにそのスロットで値を返すことを除いて、挿入と文字通り同じことを行う必要があります。
これを文字通りに解釈して同じアルゴリズムを適用すると、キー 11 を検索すると、スロット 4 に到達します。これは、スロット 1 から開始し、空のスロットが見つかるまで順方向にプローブし続けるためです。スロット 2 は空ではないので、私が望むものであっても、スロット 2 で停止しません。
別のチェーンを使用しても、これに苦労しています。3 つのキーはすべてスロット 1 に格納されますが、同じアルゴリズムを使用して検索すると、リンクされたリスト内のどのノードではなく、スロット 1 が返されます。