私は次の質問をします、そしてそれはハッシュを使った解決策を私に叫びます:
問題 :
数の膨大なリストが与えられた場合、x1........xn
ここでxi <= T
、2つのインデックスが存在するかどうかを知りたいと思います。i,j
ここで、x_i == x_j
。実行時に、また期待値が、問題
のアルゴリズムを見つけます。O(n)
O(n)
現時点での私の解決策:ハッシュを使用します。ここでは、を使用したマッピング関数h(x)
を使用しchaining
ます。
A
まず、新しい配列を作成します。これを、各セルがリンクリストであると呼びましょう。これが宛先配列になります。
ここで、ハッシュ関数を使用して、すべてのn
数値を実行し、の各要素をx1........xn
正しい場所にマップします。これにはO(n)
実行時間がかかります。
その後、を実行しA
、衝突を探します。に格納されている値にマップされたとlength(A[k]) > 1
を返すセルが見つかった場合、最後に2つの数値(実際に存在する場合)のマップされた値があれば、ここでの合計実行時間は最悪の場合になりますのセル。xi
xj
A[k]
O(n)
A