이진 탐색
본 서비스가 제공하는 내용 및 자료가 사실임을 보증하지 않습니다. 시스템은 언제나 실수를 할 수 있습니다. 중요한 의사결정 및 법리적 해석, 금전적 의사결정에 사용하지 마십시오.
이진 탐색(Binary Search)은 정렬된 배열 내에서 목표 값의 위치를 찾는 검색 알고리즘이다. 반간격 검색(half-interval search), 로그 검색(logarithmic search), 또는 이진 찹(binary chop)이라고도 불린다. 탐색 범위를 매 단계마다 절반으로 나누어 가며 값을 찾기 때문에 선형 탐색보다 훨씬 빠른 속도를 제공한다. 반드시 데이터가 정렬되어 있어야 한다는 전제 조건이 필요하다.
개요
이진 탐색은 분할 정복(Divide and Conquer) 접근 방식을 기반으로 하는 효율적인 검색 알고리즘이다. 배열의 중간 요소와 목표 값을 비교하여 일치하지 않으면 목표 값이 존재할 수 없는 절반을 제거하고, 나머지 절반에서 다시 검색을 수행한다. 이 과정은 목표 값을 찾거나 남은 탐색 범위가 비어 있을 때까지 반복된다.
동작 원리
이진 탐색의 구체적인 동작 단계는 다음과 같다.
- 초기화: 탐색할 범위의 시작 인덱스(
left)를 0으로, 끝 인덱스(right)를 배열의 마지막 인덱스로 설정한다. - 중간값 계산: 현재 범위의 중간 인덱스(
mid)를 계산한다. 일반적으로mid = (left + right) // 2공식을 사용한다. - 비교 및 범위 축소:
arr[mid]가 목표 값과 일치하면 탐색을 종료하고 인덱스를 반환한다.- 목표 값이
arr[mid]보다 작으면right를mid - 1로 변경하여 왼쪽 절반을 탐색한다. - 목표 값이
arr[mid]보다 크면left를mid + 1로 변경하여 오른쪽 절반을 탐색한다.
- 반복: 목표 값을 찾거나
left가right보다 커질 때까지 2~3단계를 반복한다.

시간 복잡도
이진 탐색은 매 단계마다 탐색 범위를 절반으로 줄이기 때문에 최악의 경우에도 의 시간 복잡도를 가진다. 이는 데이터의 개수가 개일 때 최대 번의 비교 연산만 수행하면 된다는 의미이다. 데이터의 개수가 많아질수록 의 복잡도를 가진 선형 탐색에 비해 성능 우위가 비약적으로 커진다.
특징 및 한계
이진 탐색은 매우 빠르지만 반드시 데이터가 정렬되어 있어야만 사용할 수 있다. 정렬되지 않은 데이터의 경우 정렬을 먼저 수행해야 하므로, 데이터가 자주 추가되거나 삭제되는 환경에서는 정렬 유지 비용이 발생할 수 있다. 또한 배열과 같이 인덱스를 통한 임의 접근(Random Access)이 가능한 자료구조에서 가장 효율적이다.
변형 및 관련 구조
이진 탐색의 원리는 다양한 자료구조와 알고리즘의 기초가 된다.
- 이진 탐색 트리(BST): 이진 탐색의 원리를 트리 구조에 적용하여 삽입, 삭제, 탐색을 효율적으로 수행한다.
- Lower Bound & Upper Bound: 정렬된 배열에서 특정 값 이상의 숫자가 처음 나타나는 위치나 특정 값을 초과하는 숫자가 처음 나타나는 위치를 찾는 변형 방식이다.
- 지수 검색(Exponential Search): 이진 탐색을 무한한 목록으로 확장하여 사용한다.
- B-트리: 데이터베이스나 파일 시스템에서 대량의 데이터를 탐색하기 위해 이진 탐색의 개념을 확장한 구조이다.