이진 탐색
# 이진탐색 개념
이진 탐색 (이분 탐색, Binary Search) : 정렬되어 있는 리스트에서 탐색 범위를 절반씩 좁혀가며 데이터를 탐색하는 탐색 알고리즘
- 배열 내부의 데이터가 정렬되어있어야 사용 가능
- 분할 정복 알고리즘을 사용한 예시
- 시간복잡도 : $O(\log n)$
- 최선 : $O(1)$ (찾고자 하는걸 바로 찾을 때), 평균 : $O(\log n)$, 최악 : $O(\log n)$
- 이렇게 1번 처리할 때마다 검색해야하는 데이터의 양이 절반씩 떨어지는 알고리즘을 $O(\log n)$ 알고리즘이라고 함
- $\log n$은 굉장히 작아서 상수에 거의 근접하다고 보면됨
- ex) N이 10,000,000이면 $\log 10000000 = 23.253\dots$
- 매번 실행할 때마다 $\frac {1} {2}$씩 크기가 줄어든다. 몇 번 만에 크기가 1이 될까? 입력 크기가 N이라고 하자.
$$ N * \left( \frac{1}{2} \right)^k = \frac {N} {2^k} = 1 $$
$$ 2^k = N \Rightarrow \log_2 2^k = \log_2 N $$
$$ \therefore k = log N $$
# 이진탐색 - 단순 반복
|
|
# 이진탐색 - 재귀 구현
|
|