이진 탐색(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보다 커질 때까지 위 과정을 반복한다.

시간 복잡도

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

특징 및 한계

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

변형 및 관련 구조

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

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

참고 자료

5
이진 검색이진 검색 컴퓨터 과학에서 이진 검색(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) 알고리즘이진 탐색(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이진 탐색(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/이진 탐색 알고리즘 | Kernel360 Crew Blog이진 탐색 알고리즘 | Kernel360 Crew Blog # 이진 탐색이란? 이진 탐색이란? ‘정렬된 배열(리스트)’에서 탐색 범위를 절반으로 줄여가며 특정 값을 찾는 알고리즘이다. 탐색할 때마다 탐색 범위가 절반으로 줄어들기 때문에 ‘탐색해야 할 데이터의 양이 많을수록 유리’하다. # 동작 방식 ![[이진 탐색.gi…https://kernel360.github.io/blog/Binary-search이진 탐색 | O(log n) 탐색 알고리즘 완벽 정리왼쪽으로 스와이프하여 다음 글로 오른쪽으로 스와이프하여 이전 글로 핀치로 이미지 확대/축소 ### Keyboard Shortcuts ←→Navigate posts SpaceScroll down JKNext/Previous post /Search ?Show this help Close Previous Next 이진 탐색…https://pkglog.com/blog/algorithm-series-09-binary-search/

관련 문서