이진 탐색: 숫자 맞히기 게임의 최적해
지난 레슨의 가장 편한 초록 선 O(log n), 오늘 그 정체를 벗겨요. 어릴 때 「1부터 100까지 숫자 하나 생각했어, 맞춰 봐」 해 본 적 있나요? 숫자 맞히기의 최적 전략이 바로 컴퓨터 과학의 가장 고전적인 알고리즘 중 하나—이진 탐색입니다. 먼저 플레이하고, 그다음 원리를 말해요.
시스템이 이미 1부터 100 사이 숫자를 정해 두었어요. 아래 띠가 후보 전부입니다: 아무 숫자나 눌러 맞혀 보세요. 크면/작다를 알려 주고, 제외된 숫자는 자동으로 회색이 됩니다. 먼저 감으로 아무거나 찍어 횟수를 적고, 「이진 탐색으로 맞히기」를 눌러 모범 답을 보세요. 보세요: 이진으로 한 번 맞힐 때마다 밝은 영역이 정확히 절반으로 줄어요.
「절반 자르기」의 힘은 데이터가 클 때 진짜로 드러나요. 아래 데이터량을 눌러 이진이 최대 몇 번인지 보고, 「연속 접기」 애니메이션을 보세요. 보세요: 데이터가 만 배가 되어도 횟수는 7에서 20 남짓으로만 늘어요.
⚠️ 중요한 전제: 이진 탐색의 입장권은 「먼저 정렬」
숫자 맞히기가 되는 이유는 숫자에 크기 순서가 있기 때문이에요—「크다」는 힌트가 의미를 갖습니다. 페이지 순서가 뒤섞인 사전으로 바꾸면, 중간을 펼쳐 「고양이」가 나와도 「개」가 왼쪽인지 오른쪽인지 알 수 없고, 이진 탐색은 바로 무력화됩니다. 그래서 O(log n) 탐색을 누리려면 먼저 정렬 비용을 내야 해요—정렬을 어떻게 하고 얼마나 비싼지는 바로 다음 레슨의 주인공입니다.
사전 / 연락처 넘기기
「王」을 찾을 때 첫 장부터 안 넘깁니다: 중간을 펴고 철자 앞뒤를 비교해 절반을 버립니다—손동작이 곧 이진 탐색이에요.
git bisect로 나쁜 커밋 찾기
커밋 1000개 중 하나가 버그를 넣었나요? git이 중간 커밋으로 점프해 테스트하게 하고, 좋은 쪽/나쁜 쪽을 잘라 10번 안에 범인을 잠급니다.
가격 맞히기 / 파라미터 조정
「이 술 얼마야?」「높다」「낮다」—예능 가격 맞히기에서 고수는 머릿속으로 이진을 합니다. 하이퍼파라미터를 손으로 좁혀 가는 것도 같은 수예요.
이 강의가 전하고 싶은 것
- 절반을 자르는 힘: 후보 100개면 7번, 10억 개도 30번—그게 O(log n)
- 운이 아니라 보장: 이진 탐색이 주는 건 최악 경우의 상한, 엔지니어링이 원하는 건 확정성
- 정렬이 전제: 뒤섞인 사전은 못 넘깁니다. 이진을 쓰려면 먼저 정렬값을 내세요(다음 레슨)
- 일상 속 진짜 모습: 사전 넘기기, git bisect로 나쁜 커밋 찾기, 가격 맞히기—전부 이진