私はすでにソートされている整数(つまり1,1,3,3,3,3,7,7、...)を保持する直接バッファを持っています。ほとんどの値は複数回発生します。私が検索する価値の最初の位置を見つけたい。ソートされた巨大なダイレクトバッファをJavaで効率的に検索するにはどうすればよいですか?
- バッファに直接作用する検索機能はありますか Javaに組み込まれていますか? (何も見つかりませんでした)
- もしそうでなければ、そのような機能を提供するまともなライブラリがありますか?そうでない場合
、実装のために推薦するものを検索アルゴリズム、ことを考える:
- 私は通常私のバッファに数百万のエントリを持つことになります
- 速度は、それが返さなければなりません
- 非常に重要です検索された番号が最初に出現する
- 後で元のデータが必要になるため、データを変更しないでください。
EDIT:Arrays.binarySearch()
を示唆全てのポスターのおかげで、しかしが、私の知る限り、直接バッファは、一般的に補助配列を持っていません。そのため、私はバッファで直接動作する実装を探していました。
また、各値は1000回まで発生する可能性があるため、着陸点を見つけた後の線形探索はそれほど効率的ではないかもしれません。 dasblinkenlightのコンパレータ提案はうまくいくかもしれません。
'Arrays.binarySearch'はトリックですか?何百万というエントリでは、30ステップ以下で答えを得られるはずです。最後の位置ではなく最初の位置を取得するためにカスタムコンパレータを用意する必要があるかもしれません。 – dasblinkenlight
私はバイナリ検索を使用して番号を見つけ、その番号の最初の出現を得るまで左へ直線検索を開始します。 –
@dasblinkenlight binarySearchの使用のみが動作しません。ここでは数字が重複しており、質問者は数字の最初の出現を望んでいるからです。 –