| English | 의미 |
|---|---|
| linear search/ˈlɪnɪə sɜːtʃ/ | 선형 탐색 |
| binary search/ˈbaɪnəri sɜːtʃ/ | 이진 탐색 |
백만 개의 이름에 대한 20가지 질문
- 전화번호부에는 백만 명의 이름이 들어 있습니다. 하나씩 확인한다면 원하는 이름을 찾을 때까지 반백만 번의 비교를 할 것으로 예상됩니다.
- 대신 중간에서 열고, 이름이 어느 반에 있는지 결정한 뒤 나머지 반은 버립니다. 이를 반복하십시오. 어떤 이름도 20번의 비교로 도달할 수 있습니다.
- 반백만 대 스무 개의 차이는 사소한 절감이 아니라, 작동하는 프로그램과 사용할 수 없는 프로그램의 차이입니다. 단, 조건이 하나 있습니다: 목록이 이미 정렬되어 있어야 한다는 점입니다.
- 이 수업은 선형 탐색과 이진 탐색이며, 각각의 성능과 선택 방법을 다룹니다.
선형 탐색
FOR i ← 1 TO n
IF A[i] = target THEN
RETURN i
ENDIF
NEXT i
RETURN -1 // not found
- 시작점에서 시작하여 각 요소를 타겟과 비교하고, 매칭을 찾거나 끝까지 도달하면 멈춥니다.
- 어떤 목록에도 적용되며, 정렬되었든 그렇지 않든 상관없으며, 순환할 수 있는 모든 구조에서도 작동합니다.
- 최악의 경우: 목표가 마지막에 있거나 없으므로, 모든 $n$ 요소를 비교해야 하므로 $O(n)$입니다. 평균적으로는 약 절반 정도입니다.

처음부터 하나씩
선형 검색은:
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
선형 탐색은 사전 준비가 필요하지 않으며, 어떤 목록에서도 작동하고 최악의 경우 O(n)입니다.
다음과 같은 데이터일 때 선형 탐색이 더 나은 선택입니다:
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
exploit할 순서가 없거나(또는 매우 작은 목록인 경우), 선형 탐색은 먼저 정렬하는 비용을 피합니다.
이진 탐색
low ← 1 ; high ← n
WHILE low <= high DO
mid ← (low + high) DIV 2
IF A[mid] = target THEN
RETURN mid
ENDIF
IF A[mid] < target THEN
low ← mid + 1
ELSE high ← mid - 1
ENDWHILE
RETURN -1
- 데이터가 정렬되어 있음을 요구합니다. 중간 요소를 타겟과 비교합니다: 매칭하면 멈추고, 타겟이 크면 아래쪽 반을 버리거나, 그렇지 않으면 위쪽 반을 버립니다.
- 각 비교마다 아직 탐색할 범위가 반으로 줄어드므로, 비교 횟수는 $O(\log_2 n)$입니다.
- 백만 개 항목에 약 20번의 비교가 필요한 이유입니다: $2^{20}$은 백만보다 약간 니다.
검색 알고리즘
이진 탐색은 각 단계마다 범위를 절반으로 줄임
선형 검색은 모든 항목을 확인하며, 이진 검색은 정렬된 목록을 절반으로 줄여—훨씬 적은 비교 횟수임.
이진 탐색의 최악의 시간 복잡도는:
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
각 단계마다 범위를 반으로 줄이면 비교 횟수는 로그 수에 해당합니다.
백만 개의 정렬된 항목에 대해 이진 탐색에는 대략 몇 번의 비교가 필요한가?
난이도 2/5 · 140 코인 + 오늘 첫 완료 시 소액 보너스
$\log_2(1\,000\,000) \approx 20$ — 약 20회 비교면 됩니다.
이진 탐색은 모든 목록에서 사용할 수 있으며, 정렬 여부와 상관없이 가능합니다.
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
중간 요소를 비교하여 버릴 절반을 결정하지만, 이는 데이터가 정렬되어 있을 때만 의미 있습니다.
이진 탐색은 O(log n)인 이유는 각 비교가 ____ 아직 탐색해야 할 범위를 줄이기 때문입니다.
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
20번의 반으로 나누기를 통해 백만이 1이 되므로, 2^20가 백만보다 약간 큰 수임을 기억해야 합니다.
풀이 예제: 이진 탐색 추적
- 정렬된 목록은 2, 5, 8, 12, 16, 23, 38, 56, 72, 91입니다. 23에 대한 탐색을 추적하십시오.
low은 1,high은 10이므로mid은 5이며, 값은 16입니다. 16은 23보다 작으므로 아래쪽 반을 버립니다:low은 6이 됩니다.low6,high10이므로mid은 8이며, 값은 56입니다. 56은 23보다 크므로high은 7이 됩니다.low6,high7이므로mid은 6이며, 값은 23입니다. 발견됨, 3번의 비교로 완료되었습니다. 선형 탐색이라면 6번이 걸렸을 것입니다.- 각 단계별
low,high,mid과 값을 보여주십시오. 대부분의 점수는 답이 아니라 추적에 있습니다.
정렬된 목록 2, 5, 8, 12, 16, 23, 38, 56, 72, 91에서 이진 탐색으로 23을 찾기 위해 필요한 비교 횟수는 몇 번입니까?
난이도 2/5 · 140 코인 + 오늘 첫 완료 시 소액 보너스
mid 5는 16(너무 작음), mid 8은 56(너무 큼), mid 6은 23을 가집니다. 선형 탐색이라면 6번의 비교가 필요했을 것입니다.
선택 기준
| 선형 | 이진 | |
|---|---|---|
| 데이터가 정렬되어야 함 | 아님 | 필수 |
| 비교 횟수, 최악의 경우 | $n$ | $\log_2 n$ |
| 백만 개 항목 | 최대 1,000,000 | 약 20 |
| 적합 | 비정렬 또는 소规模 목록, 연결リスト | 큰 정렬 배열, 반복 검색 시 |
- 먼저 정렬하는 비용은 선형 탐색 한 번보다 크므로, 이진 탐색은 목록이 이미 정렬되어 있거나 여러 번 검색될 때만 유리합니다.
- 이진 탐색은 또한 중간 요소에 대한 직접 접근이 필요하며, 이는 배열은 가지고 있지만 연결리스트는 없습니다.
연습 예제: 선택의 근거 제시
- 프로그램이 50개의 기록이 포함된 비정렬 목록을 한 번 검색합니다. 선형 탐색: 목록을 먼저 정렬하는 비용은 탐색에 필요한 50번의 비교보다 훨씬 큽니다.
- 프로그램이 정렬된 배열의 백만 개 기록을 초당 수천 번 검색합니다. 이진 탐색: 데이터는 이미 정렬되어 있으며, 각 검색은 최대 백만 번 대신 약 20번의 비교만 필요합니다.
- 프로그램이 연결리스트를 검색합니다. 선형 탐색: 이진 탐색은 바로 중간 요소로 점프해야 하는데, 연결리스트는 시작점에서만 따라갈 수 있습니다.
- 알고리즘을 명시한 뒤, 그것을 결정하는 데이터의 성질을 언급하십시오.
각 탐색을 핵심 사실과 연결하십시오.
난이도 2/5 · 140 코인 + 오늘 첫 완료 시 소액 보너스
이진 탐색은 O(log n)으로 훨씬 빠르지만 정렬된 데이터에서만 사용 가능하며, 선형 탐색은 O(n)으로 어디에서나 작동합니다.
언제가 선형 탐색이 더 나은 선택입니까? 적용되는 모든 것을 선택하십시오.
난이도 2/5 · 140 코인 + 오늘 첫 완료 시 소액 보너스
마지막 경우가 바로 이진 탐색이 승리하는 상황입니다. 먼저 정렬하는 비용은 단일 선형 탐색보다 크므로 여러 번 검색할 때만 유리합니다.
파일을 정렬로 유지하는 비용
- 이진 탐색은 정렬된 목록에서만 가능하며, 그 정렬은 무료가 아닙니다. 선을 변명하라는 질문은 그 비용을 평가하라는 뜻입니다.
- 데이터가 자주 검색되고 드물게 변경된다면, 한 번만 정렬하고 이후 모든 검색은 $\log_2 n$입니다. 사전이나 조회표의 경우입니다.
- 데이터가 항상 변경된다면, 각 삽입 시 순서를 유지해야 하므로 이후 요소들의 이동 비용이 발생합니다. 비정렬 데이터에 대한 선형 탐색이 전체 비용 면에서 저렴할 수 있습니다.
- 숫자로 논리를 구체적으로 보일 수 있습니다: 백만 개의 기록은 선형 탐색 시 최대 백만 번의 비교가 필요하지만, 이진 탐색 시에는 20번만 필요하며, 이는 $2^{20} > 10^6$ 때문입니다.
- 따라서 표시된 답은 두 부분 모두를 포함합니다: 얼마나 자주 검색되고, 얼마나 자주 변경되는지.
탐색 알고리즘 선택의 근거를 순서대로 정리하십시오.
난이도 3/5 · 200 코인 + 오늘 첫 완료 시 소액 보너스
justify 질문은 승자를 찾는 것이 아니라 타협(trade-off)을 요구합니다. 자주 변경되는 목록에서의 이진 탐색은 선형 탐색보다 전체 비용이 더 클 수 있습니다.
놓칠 수 있는 점
- 이진 탐색은 정렬된 데이터가 필수입니다. "더 빠르다"고만 말하고 그 조건을 언급하지 않으면 감점 대상입니다.
- 각 단계마다 범위가 절반으로 줄어듭니다. 여기서 $\log_2 n$이 나옵니다. 기호만 적는 것이 아니라 이유를 설명하세요.
- 두 검색 모두 찾을 수 없음을 보고할 수 있어야 하며, 이것이
-1과 루프 조건이 수행하는 역할입니다. - 이진 탐색은 직접 접근(direct access) 이 필요하므로, 리스트가 정렬되어 있더라도 링크드 리스트에는 적용되지 않습니다.
이해했습니다
- 선형 탐색(linear search) 은 시작점에서 각 요소를 비교하며, 모든 리스트에서 작동하며, $O(n)$입니다
- 이진 탐색(binary search) 은 정렬된 데이터와 직접 접근이 필요하며, 중간 요소를 비교하여 매번 범위를 절반으로 줄여, $O(\log_2 n)$을 제공합니다: 백만 개 항목에 대해 약 20회 비교
- 이진 탐색을 추적(trace)할 때, 각 단계의
low,high,mid및 해당 값 shown - 데이터 중 선택: 비정렬, 소량 또는 링크드 리스트 → 선형; 대량, 정렬, 빈번한 검색 → 이진