APIクラスを使用せずに、順序付けされていない配列のNに最も近い値を配列で検索する方法について誰かがアドバイスを提供できますか?アルゴリズムを線形時間にしたくありません。
これを行う1つの方法は、配列を順序付けてから、バイナリチョップ検索を実行することでしょうか。
これを行うためのより効率的な方法はありますか?
@ThomasPastircakが書いたように、配列がソートされていない場合、線形時間のパフォーマンスよりも良くなることはありません。
配列内のデータを別のデータ構造に挿入すると、少なくとも線形の複雑さが発生し(配列のすべての要素を挿入する必要があるため)、並べ替えも線形の複雑さよりも悪化します。
あなたの質問と「ソートされていない配列で最大/最小数を検索するにはどうすればよいですか?」という質問との間に大きな違いはありません。。参照値Nとの最小差を検索しているだけです。
その簡単な解決策は次のとおりです。
public static int closest(double[] array, double n) {
double leastDifference = Double.POSITIVE_INFINITY;
int indexOfLeastDifference = -1;
for (int a = 0; a < array.length; a++) {
double difference = Math.abs(array[a] - n);
if (difference < leastDifference) {
indexOfLeastDifference = a;
leastDifference = difference;
}
}
return indexOfLeastDifference;
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加