5강 / 20강

이진 탐색 — 100만 개를 20번에

정렬해 두면 절반씩 버릴 수 있다

이진 탐색 — 100만 개를 20번에
가운데를 보고 절반을 통째로 버린다. 이 한 가지 아이디어가 100만을 20으로 줄입니다.

국어사전에서 '알고리즘'을 찾을 때, 여러분은 1페이지부터 넘기지 않습니다. 대충 가운데를 펴고 "아, 여기는 'ㅅ'이네, 그럼 앞쪽" 하며 절반을 버리죠.

이것이 이진 탐색(binary search)입니다. 한 번 볼 때마다 후보의 절반이 사라집니다.

📖
가운데를 본다
중간 값과 비교
✂️
절반을 버린다
범위가 반으로
🔁
반복한다
하나 남을 때까지

🎮 이진 탐색 실험실

정렬된 주문번호 목록에서 하나를 찾아 봅시다. ▶ 한 걸음을 누를 때마다 회색으로 버려지는 절반을 보세요. 아래쪽에는 선형 탐색과 비교 횟수가 나란히 표시됩니다.

이진 탐색 — 회색이 '버려진 절반'입니다
불러오는 중…
10만 건을 17걸음에. 직접 실행해 확인해 보세요.
Python 브라우저에서 실행

왜 O(log n)일까요

매번 절반이 사라지니까, 몇 번 반으로 나누면 1이 되는가가 걸음 수입니다.

데이터 개수 n선형 탐색 (최악)이진 탐색 (최악)
100100번7번
1,0001,000번10번
100,000100,000번17번
1,000,0001,000,000번20번
1,000,000,00010억 번30번

맨 아래를 보세요. 데이터가 1,000배 늘어도 걸음은 10번만 늘어납니다. 이것이 O(log n)의 힘이에요. 데이터가 커질수록 이 차이는 더 벌어집니다.

log2(n)이 곧 걸음 수입니다.
Python 브라우저에서 실행

이진 탐색이 안 되는 경우

  • 정렬이 안 됨 — 이진 탐색의 전제가 깨집니다. 답이 틀리게 나와요.
  • 부분 일치 검색 — "이어폰이 들어간 상품"은 정렬로 못 찾습니다. (이건 전문 검색 엔진의 영역이에요.)
  • 데이터가 계속 바뀜 — 정렬 상태를 유지하는 데 비용이 듭니다. 삽입이 아주 잦으면 해시가 낫습니다 (8강).
정렬은 이진 탐색의 '선택'이 아니라 '전제'입니다.
Python 브라우저에서 실행
🤔 확인 문제
정렬된 상품 100만 개에서 이진 탐색으로 하나를 찾을 때 최악 비교 횟수는?
🤔 확인 문제
이진 탐색을 쓰기 위한 필수 전제 조건은?
🤔 확인 문제
"주문 조회가 느립니다"라는 신고를 받았을 때 시스템 관리자가 가장 먼저 확인할 것은?