일단 이 글에서 이분 탐색이 무엇인지에 관한 설명은 하지 않겠습니다.
이미 잘 정리된 글이 많으며, 잠깐만 구글링을 해 보아도 쉽게 찾을 수 있습니다. (물론 CLRS를 봐도 좋고)
이 포스팅에서는 실수와 정수 범위에서 이분 탐색을 할 때의 탐색 범위에 관해 다룹니다.
1. 정수 이분 탐색
말 그대로 정수 범위에서의 이분 탐색이며, 특정한 조건을 만족하는 최초의 정수 같은 것을 찾을 때 이용합니다.
범위 설정
현재 탐색 범위가
그리고
이때 범위를 나눈다면 두 가지 경우가 있습니다.
1. |
2. |
반대로
때에 따라서
2. 실수 이분 탐색
실수 범위 내에서 특정한 조건을 만족하는 최초의
범위 설정
실수 범위에서 이분 탐색을 하기 위해서
정수 이분 탐색에서는 정수 범위만 확인하기 때문에
위에서 정리한 2가지 Case에 대해 실수 이분 탐색에서는
이렇게 변하는 이유는 간단하게, 구간 안의 모든 실수가 탐색 범위에 들어가기 때문입니다.
정확하게 하면 탐색 범위는
닫는 말
이분 탐색은 개념 자체는 쉽지만 구현할 때에 헷갈릴 수 있는 기법입니다. 탐색에 포함하고 배제할 범위를 잘 생각하여 복잡한 상황에서도 실수하지 않도록 하기를 바랍니다.
나정휘 님의 https://www.acmicpc.net/blog/view/109
이분 탐색(Binary Search) 헷갈리지 않게 구현하기
개요 이분 탐색은 off-by-one error가 발생하기 쉬워서 늘 헷갈립니다. 이분 탐색 문제를 풀다보면 탈출 조건으로 lo <= hi, lo < hi, lo + 1 < hi 중 어느 걸 선택해야 할 지, 정답이 lo인지 hi인지 (lo + hi) / 2
www.acmicpc.net
이런 글 도 있으니 필요하다면 참고하시길 바랍니다.
'Algorithms' 카테고리의 다른 글
Knuth-Morris-Pratt Algorithm (1) | 2023.10.02 |
---|---|
Dijkstra's Algorithm (1) | 2023.09.11 |
Segment Tree with Bitset (0) | 2023.08.09 |
The Segment Tree with the Maximum Sum (0) | 2023.04.06 |
Euler tour technique (0) | 2023.02.28 |