만족
[알고리즘] 이분 탐색(Binaray Search) 본문
[알고리즘] 이분 탐색(Binaray Search)
기타 CS 이론/Algorithm Satisfaction 2018. 1. 16. 21:46이분 탐색(Binary Search)
정렬되어 있는(이분 탐색의 주요 조건) 배열에서 데이터를 찾으려 시도할 때,
순차탐색처럼 처음부터 끝까지 하나씩 모든 데이터를 체크하여 값을 찾는 것이 아니라
탐색 범위를 절반씩 줄여가며 찾아가는 Search 방법이다.
작동예시
1 2 3 4 5 6라는 값에서 6을 찾고자 한다면
배열의 중간에 위치한 3이라는 값과 6을 비교한다.
6은 3보다 크므로, 이제 3의 왼쪽에 위치하는 값들은 탐색할 필요가 없으므로
(어차피 3 왼쪽에 있는 수들은 3보다 작기 때문이다)
3의 오른쪽에 있는 값들을 대상으로 탐색을 다시 시도한다.
이제 4 5 6이 남았으므로, 다시 중간값인 5와 찾고자 하는 대상인 6를 비교한다.
6은 5보다 크므로, 5의 오른쪽에 있는 값들을 대상으로만 탐색을 다시 시도한다.
이제 6만이 남았는데 6과 6을 비교하면, 값이 일치하므로 탐색을 종료한다.
자바 코드
public static int binarySearch(int[] array, int target){
int start= 0;
int end= array.length-1;
int mid= (end+start)/2;
while(end-start>= 0){
if(array[mid]== target){
//Case: Find target in array
return mid;
}else if(array[mid]<= target){
//Case: target is exist in right of array[mid]
start= mid+1;
}else{
//Case: target is exist in left of array[mid]
end= mid-1;
}
mid= (end+start)/2;
}
//Case: Can't find data in array
return -1;
}
시간복잡도
처음부터 끝까지 원하는 값을 찾을 때까지 탐색을 계속하는 순차 탐색은 Worst Case일 때 O(n)이라는 Time Complexity를 보여준다.
10만개의 데이터가 있다면 무려 10만번을 탐색해야 하는 것이다.
그러나, Binary Search는 탐색 대상을 절반씩 계속해서 줄여나가기 때문에, Worst Case일 때에도 탐색의 횟수가 log2n 이 되므로
10만개의 데이터가 있다고 하더라도 약 16번 정도로 탐색을 끝낼 수 있다.
Time Complexity는 O(log n)이다.
'기타 CS 이론 > Algorithm' 카테고리의 다른 글
[알고리즘] 버블 정렬 (Bubble Sort) (0) | 2021.07.24 |
---|---|
[알고리즘] 점근적 표기법 (0) | 2018.11.13 |
[알고리즘] 퀵 정렬 (Quick Sort) (0) | 2018.01.15 |
[알고리즘] 병합 정렬(Merge Sort) (0) | 2018.01.14 |
[알고리즘] 삽입 정렬(Insertion Sort) (0) | 2018.01.13 |
Comments