탐색 범위를 반으로 줄여가며 데이터를 찾는 알고리즘
정렬된 배열에서 특정한 값을 효율적으로 찾는 탐색 알고리즘이다.
이진 탐색은 배열에서의 값 탐색, 범위 내의 특정 조건을 만족하는 요소 찾기(예: 최소 또는 최대 값의 경계 찾기), 알고리즘 문제 해결 시 탐색 범위를 좁혀나가는 과정 등의 다양한 상황에서 활용할 수 있다.

이진 탐색의 시간복잡도는 O(logN)이다.
이진 탐색을 반복할수록 남아 있는 요소의 개수는 1/2로 줄어든다.
이런 식으로 반복되는데, K번째 수행하게 되면 남은 자료의 개수는 로, 탐색이 끝나는 시점에는 남은 자료의 개수가 1이 되어야 한다.
즉, 의 방정식을 세울 수 있다.
양변에 를 곱하면, 으로, N에 따른 시행횟수는 이다.
def binary_search_iterative(arr, target):
left, right = 0, len(arr) - 1
while left <= right:
mid = (left + right) // 2
if arr[mid] == target:
return True
elif arr[mid] < target:
left = mid + 1
else:
right = mid - 1
return False
def binary_search_recursive(arr, target, left, right):
if left > right:
return False
mid = (left + right) // 2
if arr[mid] == target:
return True
elif arr[mid] < target:
return binary_search_recursive(arr, target, mid + 1, right)
else:
return binary_search_recursive(arr, target, left, mid - 1)
https://wikidocs.net/233716
https://www.mathwarehouse.com/programming/gifs/binary-vs-linear-search.php
https://jwoop.tistory.com/9