알고리즘/개념
이진탐색(Binary Search, python)
XZXXZX
2021. 5. 24. 13:30
728x90
반응형
이진 탐색은 배열 내부의 데이터가 정렬되어 있어야만 사용할 수 있는 알고리즘
이진탐색은 탐색 범위를 절반씩 좁혀가며 데이터를 탐색한다.
이진탐색은 변수3개를 사용한다
- 시작점
- 끝점
- 중간점
중간점을 기준으로 찾고자 하는 값이 작다면 끝값을 중간점 -1 로 바꿔준다
중간점을 기준으로 찾고자 하는 값이 크다면 시작값을 중간점 + 1 로 바꿔준다.
이진 탐색은 한 번 확인할 때마다 확인하는 원소의 개수가 절반씩 줄어든다는 점에서 시간 복잡도가 O(logN)이다.
이진 탐색을 구현하는데에는 재귀를 이용하는 방법과 반복문을 통해서 구현하는 방법이 있다.
- 재귀함수
# 재귀 함수로 구현한 이진 탐색
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, mid + 1, end)
# 중간점의 값보다 찾고자하는 값이 작을 경우 중간점 기준 왼쪽 확인
else:
return binary_search(array, target, start, mid-1)
- 반복문
# 반복문으로 구현한 이진 탐색 소스코드
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 # 찾고자하는 값이 없을경우
728x90
반응형