이진 탐색(Binary Search)은 정렬된 배열 내에서 목표 값의 위치를 찾는 검색 알고리즘이다. 반간격 검색(half-interval search), 로그 검색(logarithmic search), 또는 이진 찹(binary chop)이라고도 불린다. 탐색 범위를 매 단계마다 절반으로 나누어 가며 값을 찾기 때문에 선형 탐색보다 훨씬 빠른 속도를 제공한다. 반드시 데이터가 정렬되어 있어야 한다는 전제 조건이 필요하다.

배너 광고

개요

이진 탐색은 분할 정복(Divide and Conquer) 접근 방식을 기반으로 하는 효율적인 검색 알고리즘이다. 배열의 중간 요소와 목표 값을 비교하여 일치하지 않으면 목표 값이 존재할 수 없는 절반을 제거하고, 나머지 절반에서 다시 검색을 수행한다. 이 과정은 목표 값을 찾거나 남은 탐색 범위가 비어 있을 때까지 반복된다.

동작 원리

이진 탐색의 구체적인 동작 단계는 다음과 같다.

  1. 초기화: 탐색할 범위의 시작 인덱스(left)를 0으로, 끝 인덱스(right)를 배열의 마지막 인덱스로 설정한다.
  2. 중간값 계산: 현재 범위의 중간 인덱스(mid)를 계산한다. 일반적으로 mid = (left + right) // 2 공식을 사용한다.
  3. 비교 및 범위 축소:
  • arr[mid]가 목표 값과 일치하면 탐색을 종료하고 인덱스를 반환한다.
  • 목표 값이 arr[mid]보다 작으면 rightmid - 1로 변경하여 왼쪽 절반을 탐색한다.
  • 목표 값이 arr[mid]보다 크면 leftmid + 1로 변경하여 오른쪽 절반을 탐색한다.
  1. 반복: 목표 값을 찾거나 leftright보다 커질 때까지 2~3단계를 반복한다.
이진 탐색의 중간값 탐색 과정 시각화
배열의 중간값(mid)을 기준으로 탐색 범위를 좁혀가는 이진 탐색의 기본 원리이진 검색 | Delft Stack

시간 복잡도

이진 탐색은 매 단계마다 탐색 범위를 절반으로 줄이기 때문에 최악의 경우에도 O(logn)O(\log n)의 시간 복잡도를 가진다. 이는 데이터의 개수가 nn개일 때 최대 log2n\log_2 n번의 비교 연산만 수행하면 된다는 의미이다. 데이터의 개수가 많아질수록 O(n)O(n)의 복잡도를 가진 선형 탐색에 비해 성능 우위가 비약적으로 커진다.

특징 및 한계

이진 탐색은 매우 빠르지만 반드시 데이터가 정렬되어 있어야만 사용할 수 있다. 정렬되지 않은 데이터의 경우 정렬을 먼저 수행해야 하므로, 데이터가 자주 추가되거나 삭제되는 환경에서는 정렬 유지 비용이 발생할 수 있다. 또한 배열과 같이 인덱스를 통한 임의 접근(Random Access)이 가능한 자료구조에서 가장 효율적이다.

변형 및 관련 구조

이진 탐색의 원리는 다양한 자료구조와 알고리즘의 기초가 된다.

  • 이진 탐색 트리(BST): 이진 탐색의 원리를 트리 구조에 적용하여 삽입, 삭제, 탐색을 효율적으로 수행한다.
  • Lower Bound & Upper Bound: 정렬된 배열에서 특정 값 이상의 숫자가 처음 나타나는 위치나 특정 값을 초과하는 숫자가 처음 나타나는 위치를 찾는 변형 방식이다.
  • 지수 검색(Exponential Search): 이진 탐색을 무한한 목록으로 확장하여 사용한다.
  • B-트리: 데이터베이스나 파일 시스템에서 대량의 데이터를 탐색하기 위해 이진 탐색의 개념을 확장한 구조이다.

참고 자료

5
이진 탐색(Binary Search) 알고리즘이진 탐색(Binary Search) 알고리즘 728x90 ### 개요 이진 탐색(Binary Search)은 정렬된 데이터에서 중간 값을 기준으로 절반씩 범위를 줄여가며 값을 찾는 탐색 알고리즘이다. 선형 탐색보다 훨씬 빠른 **O(log n)**의 시간 복잡도를 가지며, 배열이나 리스트에서 특정 값을 빠르게 찾아야…https://itpe.jackerlab.com/entry/%EC%9D%B4%EC%A7%84-%ED%83%90%EC%83%89Binary-Search-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98[2026] 이진 탐색 | O(log n) 탐색 알고리즘 완벽 정리[2026] 이진 탐색 | O(log n) 탐색 알고리즘 완벽 정리 ## 이 글의 핵심 이진 탐색: O(log n) 탐색 알고리즘 이진 탐색 기본·Lower Bound & Upper Bound. ### 들어가며 ### ”정렬된 배열에서 찾기 = 이진 탐색” ## 이진 탐색은 정렬된 배열에서 O(log n)으로 값을 찾는…https://pkglog.com/blog/algorithm-series-09-binary-search/이진 검색이진 검색 컴퓨터 과학에서 이진 검색(binary search) 또는 반간격 검색(half-interval search), 로그 검색(logarithmic search) 또는 이진 찹(binary chop)은 정렬된 배열내에서 목표 값의 위치를 찾는 검색 알고리즘이다. 이진 검색은 목표 값을 배열의 중간 요소와 비교한다…https://ko.wikipedia.org/wiki/%EC%9D%B4%EC%A7%84_%EA%B2%80%EC%83%89이진 탐색(Binary Search) | Today DOWON Learned이진 탐색(Binary Search) | Today DOWON Learned | 이것이 취업을 위한 코딩테스트다 with 파이썬를 읽고 정리한 내용입니다. | | --- | 순차 탐색 (Sequential Search) Table of contents 트리 자료구조 1. 이진 탐색 트리 실전 문제 1. 부품 찾기 2.…https://2dowon.github.io/docs/algorithm/python-book/binary-search이진 검색 | Delft Stack이진 검색 | Delft Stack 이진 검색은 가장 인기 있고 효율적인 검색 알고리즘입니다. 실제로 가장 빠른 검색 알고리즘입니다. 점프 정렬과 마찬가지로 정렬 할 배열도 필요합니다. 배열을 두 부분으로 나눈 다음 검색중인 항목을 중간 항목과 비교하는 분할 및 정복 접근 방식을 기반으로합니다. 중간 항목이 일치하면 중…https://delftstack.com/ko/tutorial/algorithm/binary-search

관련 문서