バイナリナビゲーション
10440 ワード
英語の辞書でgooseを探したい時辞書はabcdです.順番に並んでいることを知っているからです.
必ずしもa単語集の場所で探すのではなく、g単語集の場所から探す.
検索する範囲で、中間値が検索する値と一致していることを確認します.
一致する場合は、中間値の位置を返します.
中間値が検索する値より大きい場合は、最大値を中間値位置-1に再調整します.
中間値が検索する値より小さい場合は、最小値を中間値位置+1に再調整します.
中間値が見つからないまで繰り返す
どんなに範囲が広くてもO(logn)で終わります.探索すればするほど,探索の範囲は小さくなる.
binary search関数は、ソートされた配列とアイテムを受け入れます.アイテムが並べ替えられている場合は、並べ替えられているアイテムの位置を返します.
必ずしもa単語集の場所で探すのではなく、g単語集の場所から探す.
検索する範囲で、中間値が検索する値と一致していることを確認します.
一致する場合は、中間値の位置を返します.
中間値が検索する値より大きい場合は、最大値を中間値位置-1に再調整します.
中間値が検索する値より小さい場合は、最小値を中間値位置+1に再調整します.
中間値が見つからないまで繰り返す
どんなに範囲が広くてもO(logn)で終わります.探索すればするほど,探索の範囲は小さくなる.
binary search関数は、ソートされた配列とアイテムを受け入れます.アイテムが並べ替えられている場合は、並べ替えられているアイテムの位置を返します.
import math
array = list(range(1, 101))
item = 75
def binary_search(item: int) -> int or None:
min_index = 0
max_index = len(array)-1
while min_index <= max_index:
middle_index = math.floor((min_index+max_index) / 2)
if(array[middle_index] == item):
return middle_index
if(array[middle_index] > item):
max_index = middle_index-1
if(array[middle_index] < item):
min_index = middle_index+1
return None
print(binary_search(item))
import java.lang.Math;
public class BinarySearch {
private static int binarySearch(int item, int[] array) {
int minIndex = 0;
int maxIndex = array.length - 1;
while (minIndex <= maxIndex) {
int middleIndex = (int) Math.floor((minIndex + maxIndex) / 2);
if (array[middleIndex] == item) {
return middleIndex;
}
if (array[middleIndex] > item) {
maxIndex = middleIndex - 1;
}
if (array[middleIndex] < item) {
minIndex = middleIndex + 1;
}
}
return -1;
}
public static void main(String[] args) {
int[] array = new int[100];
for (int i = 0; i < array.length; i++) {
array[i] = i + 1;
}
int item = 65;
System.out.println(binarySearch(item, array));
}
}
Reference
この問題について(バイナリナビゲーション), 我々は、より多くの情報をここで見つけました https://velog.io/@rud285/이진탐색テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol