-
이진 탐색, bisect 라이브러리Algorithms in Python/notes 2021. 1. 21. 23:25
이진 탐색 (Binary Search)
데이터가 정렬되어있을 때, 탐색 범위를 반으로 줄여가며 데이터를 빠르게 탐색하는 방법이다.
- 시작점, 끝점, 중간점을 이용한다.
- 중간점을 이용해서 탐색 범위를 줄여나간다.
• 재귀 함수로 구현한 이진 탐색 소스코드
def binary_search(arr, target, start, end): if start > end: return None mid = (start + end) // 2 # 찾은 경우 인덱스 반환 if arr[mid] == target: return mid # 중간값보다 target이 작은 경우 왼쪽 부분 확인 elif arr[mid] > target: return binary_search(arr, target, start, mid - 1) # 중간값보다 target이 큰 경우 오른쪽 부분 확인 else: return binary_search(arr, target, mid + 1, end)
• 반복문으로 구현한 이진 탐색 소스코드
def binary_search(arr, target, start, end): while start <= end: mid = (start + end) // 2 # 찾은 경우 인덱스 반환 if arr[mid] == target: return mid # 중간값보다 target이 작은 경우 왼쪽 부분 확인 elif arr[mid] > target: end = mid - 1 # 중간값보다 target이 큰 경우 오른쪽 부분 확인 else: start = mid + 1 return None
• 이진 탐색의 시간복잡도
절반씩 줄어듦 -> O(logN)
파이썬 bisect 라이브러리를 이용한 이진탐색
bisect
• bisect_left(a, x) : 정렬된 순서를 유지하면서 리스트 a에 데이터 x를 삽입할 가장 왼쪽 인덱스를 찾는 메서드
• bisect_left(a, x) : 정렬된 순서를 유지하면서 리스트 a에 데이터 x를 삽입할 가장 오른쪽 인덱스를 찾는 메서드
• 시간 복잡도: O(logN)
* 이것이 코딩테스트다 with 파이썬 - 나동빈
'Algorithms in Python > notes' 카테고리의 다른 글
Union-Find 알고리즘 (0) 2021.02.07 DFS / BFS (0) 2021.01.29 파이썬의 정렬 라이브러리 (0) 2021.01.20 정렬 (0) 2021.01.20 다이나믹 프로그래밍 (0) 2021.01.13