文字列を32ビットintにマップする非常に単純なハッシュアルゴリズムを使用しています。ハッシュが不良で、stringBとstringAの両方が123番であると仮定します。リンクリストをトラバースする必要がある場合は、すべてのアイテムをアイテムIと比較してみてください。私が正しいものを見つけるまで、探していますか?
4 に答える
はい、バケットごとのリンクリストはそれを行う1つの方法です。アイテムがリストに含まれている場合は完了です。それ以外の場合は、リストの最後に新しいアイテムを追加します。
もう1つは、空のバケットが見つかるまで、テーブル内の次のバケットをループで試すことです。
ハッシュ戦略がLinkedListを使用したクローズドハッシュに基づいており、リンクリストの順序が挿入の順序に基づいていると仮定すると、アイテムをトラバースしてコンテンツ上で比較しif ( string1.compareTo(string2) == 0 ){ ...
ますequals()
。
それは正しいです。このサイトhttp://www.strchr.com/hash_functions(Wikiは別として、もちろん!)を参照することもできます。
特定のバケットにマップされた要素の検索にはさまざまなバリエーションがあります。リンクリストだけでなく、マルチレベルのハッシュテーブルやバイナリ検索ツリーを使用することもできます。
ハッシュの競合を処理するには、競合する(後続の)値を再ハッシュするのが適切なアプローチです。元のハッシュ関数の実行時の動作を推定することは困難です。つまり、競合の発生は不明です。別のハッシュ関数を使用して競合する値をハッシュし、それらを第2レベルのテーブルに格納することは、全体として最適な時間ルックアップです。