次の検索を高速に行う方法はありますか? A配列の項目は、DESCの順序でソートされます。この検索のパフォーマンスを改善しますか?
0
A
答えて
1
あなたはあなたのケースでstd::lower_bound
アルゴリズムを使用することができます
int left = 0;
int right = items_no; // Exclusive
while (left < right) {
int mid = (left + right)/2;
if (value == A[mid])
return mid;
if (value < A[mid]) {
left = mid + 1;
} else {
right = mid;
}
}
return only_exact_match ? -1 : right - 1; // The greater
1
あなたの配列はソートされているので、二等分に類似したステップで検索することができます。まず、あなたの価値に対して中点をチェックしてください。それが等しいなら、あなたはあなたの答えを持っています。値が大きければ、値は配列の下半分になります。そうでない場合、あなたの価値は上半分にあります。値を見つけるまで、または要素がなくなるまで、配列の残りの要素を二等分することによって、このプロセスを繰り返します。 2番目のif節について、一致する値が見つからない場合、要素i + 1が存在する場合(すなわち、配列の最後にない場合)、最も近い小さい要素が要素i + 1になります。
5
バイナリ検索。他の人が書いたように、O(log N)でバイナリ検索を実行します。これは次のようなものになります。
int find_pos(int A[], int value, int items_no, bool only_exact_match)
{
const int *pos_ptr = std::lower_bound(A, A + items_no, value, std::greater<int>());
const ptrdiff_t pos = pos_ptr - A;
if (pos >= items_no)
return -1;
if (*pos_ptr != value && only_exact_match)
return -1;
return pos;
}
関連する問題
- 1. Mongoドキュメントの検索パフォーマンスを改善する方法
- 2. IXSCANのパフォーマンスを改善しますか?
- 3. os.walk検索の改善
- 4. モンテカルロツリー検索の改善点
- 5. Lucene:ランク付けされていない検索パフォーマンスを改善しますか?
- 6. タイプと検索、パフォーマンスを改善する方法は?
- 7. ロールバックはパフォーマンスを改善しますか?
- 8. CTEはパフォーマンスを改善しますか?
- 9. LIKE句のパフォーマンスを改善します
- 10. SecureFileTransferClientのパフォーマンス改善
- 11. コンテキストベースの検索を改善する
- 12. 検索をどのように改善しますか?
- 13. このlinq-to-xmlメソッドのパフォーマンスを改善できますか?
- 14. このSQLクエリのパフォーマンスを改善できますか?
- 15. 値の構造体のスライスを検索するパフォーマンスを改善する
- 16. アプリケーション、タッチイベントのパフォーマンスを改善
- 17. パフォーマンスpostgresqlのクエリを改善
- 18. 検索パフォーマンスを改善するための実績のある方法
- 19. Xamarinフォームアプリケーションのパフォーマンスの改善
- 20. マルチスレッドプログラムのパフォーマンスのテスト/改善
- 21. のNeo4jサイファークエリの改善(パフォーマンス)
- 22. 検索エンジンを改善する
- 23. Odoo(openERP)検索フィルターを改善する
- 24. KDBクエリのパフォーマンス改善
- 25. このjQueryを改善しますか?
- 26. この機能のパフォーマンスをどのように改善しますか?
- 27. Flash:ベクターグラフィックスの「スケーリングを削除する」ことでパフォーマンスを改善しますか?
- 28. セレンのwebdriver Java: "if else"パフォーマンスを改善しますか?
- 29. カスタムUSBドライバはアプリケーションのパフォーマンスを改善しますか?
- 30. SQLiteのUPDATE-per-secondパフォーマンスを改善しますか?
'std :: lower_bound'アルゴリズムです。 – ilotXXI
検索の背後にあるロジックを簡単に説明できますか? 1つの動作は正確な一致を検索することですが、他の動作は私にはあまりあいまいです。 –
@Tim Biegeleisenもう1つの動作は、完全に一致するものが見つからない場合に、最も近い項目を値未満の値に戻すことです。 – MATH000