結果セットのみを格納する必要があるように、重複の整数のリストを効率的にフィルター処理したいと思います。
これを確認できる1つの方法:
- 整数の範囲、大きい(たとえば)
- 関数があり、衝突が多いと思われます(画像はに均一に分布しています)。
- 次に、を格納する必要があり。つまり、
かなり正確な(確率的)推定値がありであるため、事前にデータ構造を割り当てることができます()。| f [ S ] | ≈ 2 30
私はいくつかのアイデアを持っていますが、何が最善のアプローチになるかわかりません:
- 入力セットがメモリに収まらないため、ビットセットは問題外です。
- ハッシュテーブルですが、(1)メモリオーバーヘッドが必要です(2)作成時にテーブルを調査する必要があり、メモリのオーバーヘッドのために追加の時間が必要です。
- 「オンザフライ」ソート、できれば複雑度(非比較ソート)。それに関して、バケットソートとフラッシュソートの主な違いは何なのかわかりません。
- 二分探索木を持つ単純な配列ですが、これには時間必要です。
- ブルームフィルターまたは同様のデータ構造を使用すると、問題の緩和(誤検知を伴う)に役立つ可能性があります。
stackoverflowの上のいくつかの質問は、物事のこの種に取り組むように見える(/programming/12240997/sorting-array-in-on-run-time、/programming/3951547/java -array-finding-duplicates)、しかし私の要件に一致するものはないようです。