728x90

이분 탐색이란?


순차탐색처럼 처음부터 끝까지 모든 데이터를 확인하여 찾는 것이 아니라
정렬되어 있는 데이터를 대상으로 탐색범위를 절반씩 줄여가며 찾아가는 탐색 방법.

이분 탐색의 전제 조건은 정렬되어 있는 데이터를 대상으로 한다는 것.

 

 

탐색 과정


1 2 3 4 5 6 이라는 값에서 4를 찾는다면
배열의 중간에 위치한 3을 골라 4와 비교하여
찾아야하는 값인 4가 3보다 크므로
3보다 왼쪽에 위치한 값은 탐색하지 않고
3보다 큰 값들인 오른쪽에 위치한 값들의 대상으로 다시 탐색 시도

 

3보다 큰 값인 4부터 6중 다시 중간값 5와 비교하여 4는
5보다 작으므로 5의 왼쪽 값들을 대상으로 탐색 시도
5의 왼쪽값은 4밖에 없으므로 4와 4를 비교하여 일치하므로 탐색 종료

 

만약 해당 자리에 4가 아닌 다른 값이 있었다면 탐색종료
그 외 값을 찾지 못할 때 탐색 종료는 인덱스를 판단해서 결정

 

 

예제 그림


이분 탐색 과정 (이미지를 클릭해야 전 과정이 보여짐)

 

 

효율성


처음부터 끝까지 원하는 값을 찾을 때까지 탐색을 계속하는 순차 탐색은

Worst Case일 때 O(n)의  시간 복잡도를 보여줌.
10만개의 데이터가 있다면 10만번 탐색 시도.

그러나, 이분 탐색은 탐색 대상을 절반씩 계속해서 줄여나가기 때문에

Worst Case일 때 O(log N) 이 됨.
10만개의 데이터가 있다고 하더라도 약 16번 정도로 탐색을 끝낼 수 있음. 

Best Case는 중간값이 탐색 대상일때니까 O(1).

 

 

 

관련 문제

https://www.acmicpc.net/problem/1920
https://www.acmicpc.net/problem/1654
https://www.acmicpc.net/problem/1300
https://www.acmicpc.net/problem/10816

 

 

참고 사이트

https://satisfactoryplace.tistory.com/39
https://wootool.tistory.com/62

 

[알고리즘] 이분 탐색(Binaray Search)

이분 탐색(Binary Search) 정렬되어 있는(이분 탐색의 주요 조건) 배열에서 데이터를 찾으려 시도할 때, 순차탐색처럼 처음부터 끝까지 하나씩 모든 데이터를 체크하여 값을 찾는 것이 아니라 탐색 범위를 절반씩..

satisfactoryplace.tistory.com

 

추천 사이트

https://anster.tistory.com/152
https://blockdmask.tistory.com/167

 

C++ 이진 탐색(Binary Search) 구현 및 흔히 발생하는 오류

이진 탐색 전 아직 Donald Knuth 의 The art of computer programming 을 본적은 없습니다만, 스택오버플로우에 올라온 질문 에 의하면, 이런 말을 했다고 합니다. “Although the basic idea of binary search is..

anster.tistory.com

 

728x90

+ Recent posts