私は整数の配列を持っていますが、それは数十万(またはそれ以上)に達する可能性があり、元々積み重ねられていた方法であるため、数値的に昇順で並べ替えられています。
配列をクエリして、>=
入力された数値の最初の出現のインデックスをできるだけ効率的に取得できるようにする必要があります。考えもせずにこれを行う方法を知る唯一の方法は、条件がtrueになるまで配列テストを繰り返し、その時点で繰り返しを停止することです。ただし、これはこの問題に対する最も費用のかかる解決策であり、私はそれを解決するための最良のアルゴリズムを探しています。
私はObjective-Cでコーディングしていますが、応答できる人々の聴衆を広げるためにJavaScriptで例を示します。
// Sample set
var numbers = [1, 7, 23, 23, 23, 89, 1002, 1003];
var indexAfter100 = getIndexOfValueGreaterThan(100);
var indexAfter7 = getIndexOfValueGreaterThan(7);
// (indexAfter100 == 6) == true
// (indexAfter7 == 2) == true
この検索を実行するためにこのデータをDBに入れることは、メモリ内でこれにすばやく取り組むためのある種のアルゴリズムを見たいと思っているので、最後の手段にすぎません。
私のプログラムはすでに各番号をこのスタックに1つずつプッシュしているので、データ構造を変更したり、配列を構築するときに追加のデータ構造を保存したりすることができます。そのため、次のコードを変更するだけです。それらをスタックに追加します。スタックに追加されているインデックスを検索することはできません。これは、検索操作が事後に異なる値で頻繁に繰り返されるためです。
今は「B-Tree」を考えていますが、正直なところ、どうやって実装すればいいのかわからないので、それを理解する前に、この単一のユースケースに合う素晴らしいアルゴリズムがあるのではないかと思います。より良い?