バイナリナビゲーション
1177 ワード
数列のナビゲーション
所定の数列及びナビゲーション対象Xが与えられると、 Xは存在しますか? X(小さい、小さい、大きい、超える)にはいくつの要素がありますか? Xに最も近い要素は何ですか? に表示されます.
ソートされた数列の場合
より速く探索できる方法があります.バイナリ探索です.
バイナリナビゲーション
ソートを保証する配列で、標準X[二分]を使用して範囲を検索します.
O(log N)
昇順配列アレイのプロパティの任意のM番インデックスのA[M]値がXより大きい場合、A[M.N]はすべてXより大きい. の任意のM番インデックスのA[M]値がXより小さい場合、A[1..M]はすべてXより小さい. 注:バイナリ検索は昇順でソートする必要があります.
にぶんたんさく
L:ナビゲート可能な範囲の左端インデックス
R:右端インデックス
Result:Xの位置に移動
ナビゲート先:X以下の要素の一番右側の要素
Nは10万->log(10万)=16万ナビゲーション可能
よく犯す過ち
3位:L、R範囲またはエラー設定Resultの初期値
2位:L、R、M、Result変数の定義を混同して不等号書き間違いを起こす場合
1位:2点探索を行い、並べ替えがなければ
コード#コード#
所定の数列及びナビゲーション対象Xが与えられると、
ソートされた数列の場合
より速く探索できる方法があります.バイナリ探索です.
バイナリナビゲーション
ソートを保証する配列で、標準X[二分]を使用して範囲を検索します.
O(log N)
昇順配列アレイのプロパティ
にぶんたんさく
L:ナビゲート可能な範囲の左端インデックス
R:右端インデックス
Result:Xの位置に移動
ナビゲート先:X以下の要素の一番右側の要素
Nは10万->log(10万)=16万ナビゲーション可能
よく犯す過ち
3位:L、R範囲またはエラー設定Resultの初期値
2位:L、R、M、Result変数の定義を混同して不等号書き間違いを起こす場合
1位:2点探索を行い、並べ替えがなければ
コード#コード#
static int binarySearch(int[] A, int L, int R, int X) {
/*
* A[L...R] 에서 X 미만의 수(X 보다 작은 수) 중 제일 오른쪽 인덱스를 return 하는 함수
* 그런게 없다면 L - 1 을 return 한다.
*/
int result = L -1;
while (L <= R) {
int mid = (L + R) / 2;
if (A[mid] < X) {
result = mid;
L = mid + 1;
} else if (A[mid] >= X) {
R = mid - 1;
}
}
return result;
}
Reference
この問題について(バイナリナビゲーション), 我々は、より多くの情報をここで見つけました https://velog.io/@annmj/이진탐색テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol