이진 탐색
이진 탐색은 탐색 대상과 중앙값을 비교해가며 탐색 범위를 효과적으로 줄일 수 있습니다.
이진 탐색
이진 탐색은 데이터가 정렬된 상태에서 탐색하는 데 효과적인 알고리즘이다.
대상 데이터의 중앙값과 찾고자 하는 값을 비교해 데이터의 길이를 절반씩 잘라가며 탐색한다.
절반씩 잘라가며 탐색하므로 시간 복잡도는 $O(logN)$을 보인다.
이진 탐색은 구현이 간단하고 탐색에서 사용되는 기본적인 알고리즘이라 부분적인 해결 요소로 자주 사용된다.
입력 범위가 커서 $O(N^2)$이나 $O(N\cdot M)$이 시간 초과가 날 것 같다면 이진 탐색을 떠올려도 된다.
이진 탐색의 설명
이진 탐색은 오름차순으로 정렬된 데이터에서 다음 5가지 과정을 반복한다.
내림차순이라면 조건을 반대로 설정하면 된다.
- 현재 데이터셋의 중앙값을 선택한다.
- 중앙값 > 찾고자 하는 값이라면 왼쪽 데이터셋을 선택한다.
- 중앙값 < 찾고자 하는 값이라면 오른쪽 데이터셋을 선택한다.
- 1 ~ 3번 과정을 반복한다.
- 중앙값 == 찾고자 하는 값이라면 탐색을 종료한다.
이진 탐색의 예시
예를 들어 다음과 같은 vector가 있다고 하자.
V = {1, 2, 3, 4, 5, 6, 7, 8, 9}
찾고자 하는 값이 8이라고 했을 때의 경우를 살펴보자.
우선 중앙값을 5로 설정하고, 8과 비교한다.
1
2
3
1 2 3 4 5 6 7 8 9
↑
M
8은 5보다 크기 때문에 중앙값을 기준으로 오른쪽 데이터셋을 선택한다.
그리고 오른쪽 데이터셋에서 다시 중앙값을 설정한다.
1
2
3
6 7 8 9
↑
M
8은 7보다 크기 때문에 중앙값을 기준으로 오른쪽 데이터셋을 선택한다.
그리고 오른쪽 데이터셋에서 다시 중앙값을 설정한다.
1
2
3
8 9
↑
M
8을 발견했으므로 탐색을 종료한다.
이 기사는 저작권자의
CC BY 4.0
라이센스를 따릅니다.
