- 정렬된 자료를 반으로 나누어 탐색하는 방법
- 주의점 : 자료는 오름차순으로 정렬된 자료여야 한다.
- 이진트리, 이진탐색은 코딩 인터뷰 단골 문제
- 이진 탐색은 O(log N)의 속도로 검색 가능
- 구현을 위한 준비
- target : 찾고자 하는 값
- data : 오름차순으로 정렬된 list
- start : data의 처음 값 인덱스
- end : data의 마지막 값 인덱스
- mid : start, end의 중간 인덱스
- 구현개요
- 배열 전체의 중간 값을 target 값과 비교
- 중간 값이 target 값보다 큰지, 작은지에 따라 왼쪽, 오른쪽 반 선택
- 그 부분의 중간 값을 또 target과 비교 (반복)
def binary_search(array,target,start,end):
while start <= end: # 첫 인덱스 값이 마지막 값 인덱스보다 작거나 같다는 가정하에
mid = (start + end) // 2 # 중간 인덱스 값은 두 합의 절반이고
if array[mid] == target: # 만약 배열의 중간 값이 타겟 값과 같으면 mid로 리턴
return mid
elif array[mid] > target: # 배열의 중간 값이 타겟 값보다 크면
end = mid - 1 # 마지막 인덱스 값을 중간 인덱스 값 - 1 로 해서 반복
else:
start = mid + 1 # 작으면, 시작 인덱스 값을 중간 + 1로 해서 반복
return None
'개발 > Python' 카테고리의 다른 글
[Word2Vec] TypeError: __init__() got an unexpected keyword argument 'size' (0) | 2021.11.10 |
---|---|
[Python] pip, virtualenv, pipenv 란? (0) | 2021.11.08 |
[Python] jinja2 템플릿 엔진, Werkzeug (0) | 2021.10.17 |
[Python] konlpy 설치 / 설치시 Jpype 관련 문제점 해결 (0) | 2021.10.15 |
[Python] __ name __ (0) | 2021.10.15 |
댓글