Binary Search Algorithm
2690 ワード
にぶんたんさく
二分探索は探索範囲を半分に分けて探索する方法である.
この探索の最大の利点は時間の複雑さがO(logn)であることである.
私たちはよく理解して使用する順序探索を理解し、最初から最後まで探索しています.
これはkey値があるかどうかを探す方法です.
シーケンシャルプローブ方式のWorstcaseでの時間的複雑度はO(n)である.
この探索の最も簡単な例は私たちが日常生活の中で遊んでいるUp&Downゲームです.
出題者が1~100で数字を決めて数字を当てるゲーム
このゲームをプレイするときは、まず1~100個の数字の中で一番真ん中の数字50を呼び出し、徐々に範囲を絞って推測します.この方式を用いることが二分探索である.
にぶんこうほうコード
public static int binarySearch(int[] arr,int key){
int low = 0;
int high = arr.length - 1;
while(low <= high){
int mid = (low + high) / 2;
if(key < arr[mid]){
high = mid - 1;
}else if (key > arr[mid]){
low = mid + 1;
}else{
return mid;
}
}
return -1;
}
次はこの探索のコードです.
まず,探索する配列arrと検索する数字を鍵で受信する.
次に、先頭と末尾を指定し、徐々に半分に減らし、配列内のキーのインデックス値を返します.
見つからない場合は、-1を返します.
しかし,このコードは配列内の繰返し値を考慮していない.
二分探索問題
public static int binarySearch(int[] arr,int key){
int low = 0;
int high = arr.length - 1;
while(low <= high){
int mid = (low + high) / 2;
if(key < arr[mid]){
high = mid - 1;
}else if (key > arr[mid]){
low = mid + 1;
}else{
return mid;
}
}
return -1;
}
M個の検索する配列の数、配列中の数(M個)
アルゴリズム解析
package back_joon.Data_Structures;
import java.util.Arrays;
import java.util.Scanner;
public class b1920 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int[] arr = new int[N];
for(int i=0;i<N;i++){
arr[i] = sc.nextInt();
}
// 이분탐색을 위한 정렬
Arrays.sort(arr);
int M = sc.nextInt();
StringBuilder sb = new StringBuilder();
for(int i=0;i<M;i++){
if(binarySearch(arr,sc.nextInt()) >= 0){
sb.append(1).append('\n');
}else{
sb.append(0).append('\n');
}
}
System.out.println(sb);
}
/**
* @param arr 정렬 된 배열
* @param key 찾으려는 값
* @return 찾으려는 값의 인덱스
*/
public static int binarySearch(int[] arr,int key){
int low = 0;
int high = arr.length - 1;
while(low <= high){
int mid = (low + high) / 2;
if(key < arr[mid]){
high = mid - 1;
}else if (key > arr[mid]){
low = mid + 1;
}else{
return mid;
}
}
return -1;
}
}
Reference
この問題について(Binary Search Algorithm), 我々は、より多くの情報をここで見つけました https://velog.io/@kyu9610/Binary-Search-Algorithmテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol