Algorithm/Algorithm
[알고리즘] 이진 탐색(Binary Search)
밍츠
2022. 9. 8. 11:35
이진 탐색(Binary Search)
- 탐색 범위를 절반씩 좁혀가며 데이터를 탐색하여 원소 하나씩 확인해야 하는 순차 탐색보다 빠르다.
- 배열 내부의 데이터가 정렬되어 있어야만 사용할 수 있다. (데이터가 무작위일 때는 사용할 수 없음)
이진 탐색(Binary Search) 과정
- 탐색하고자 하는 범위의 시작점, 끝점 그리고 중간점을 사용해서 찾으려는 데이터와 중간점 위치에 있는 데이터를 반복적으로 비교해서 원하는 데이터를 찾아간다.
1. 시작점과 끝점을 확인한 다음 둘 사이에 중간점을 정한다. (중간점이 실수일 때는 소시점 이하를 버린다)
2. 찾으려는 데이터와 중간점 데이터를 비교하여
- 중간점의 데이터가 더 크다면 끝점을 중간점의 위치 이전으로 옮긴다.
- 중간점의 데이터가 더 작다면 시작점을 중간점의 위치 앞으로 옮긴다.
- 중간점의 데이터와 같다면 중간점 값을 반환한다.
3. 중간점의 데이터와 같을 때까지 위 과정을 반복한다.
시간복잡도
- 이진 탐색은 한 번 확인할 때마다 확인하는 원소의 개수가 절반식 줄어든다는 점에서 시간 복잡도가 O(logN)이다.
구현 코드
1. 재귀 함수를 이용한 방법
def binary_search(array, target, start, end):
if start > end:
return None
mid = (start + end) // 2
if array[mid] == target:
return mid
elif array[mid] > target:
return binary_search(array, target, start, mid - 1)
else
return binary_search(array, target, mid + 1, end)
2. 반복문을 이용한 방법
def binary_search(array, target, start, end):
while start <= end:
mid = (start + end) // 2
if array[mid] == target:
return mid
elif array[mid] > target:
end = mid - 1
else:
start = mid + 1
return None