이진검색이란 정렬된 배열에서 타겟을 찾는 검색 알고리즘이다.
대표적인 로그 시간 알고리즘
이진탐색트리 ↔ 이진검색
import math
math.log2(100000000) # 1억 개의 아이템을 27번이면 모두 찾을 수 있다.
>>> 26.57
1부터 100까지 범주에서 상대방이 마음속으로 정한 숫자를 맞추는 마술예시
Yes
→ 왼쪽 포인터를 오른쪽으로 이동Yes
No
→ 오른쪽 포인터를 왼쪽으로 이동No
No
No
Yes
math.log2(100)
>>> 6.6 #7번
데이터가 정렬되어 있고, 어떤 방식으로 들어가 있는지도 알고 있다면 해시탐색 O(1)이 더 빠르다 → 리스트의 길이에 영향을 받지 않고 항상 일정한(상수) 시간안에 결과값을 리턴
def binarySearch(array, value, low, high):
if low > high:
return False
mid = (low+high) / 2
if array[mid] > value:
return binarySearch(array, value, low, mid-1)
elif array[mid] < value:
return binarySearch(array, value, mid+1, high)
else:
return mid