이진 탐색이란 데이터가 정렬돼 있는 배열에서 특정한 값을 찾아내는 알고리즘이다.
배열의 중간에 있는 임의의 값을 선택하여 찾고자 하는 값 n과 비교한다. n이 중간 값보다 작으면 중간 값을 기준으로 좌측의 데이터들을 대상으로, X가 중간값보다 크면 배열의 우측을 대상으로 다시 탐색한다. 동일한 방법으로 다시 중간의 값을 임의로 선택하고 비교한다. 해당 값을 찾을 때까지 이 과정을 반복한다.
반복문 혹은 재귀용법을 사용해서 구현할 수 있다.
# 반복문
def binary_search(list):
left = 0
right = len(list)-1
# left가 right보다 작거나 같다면
while(left<=right):
mid = (left+right) // 2 # mid 값 계산
if list[mid] == 10:
return mid # 정답일 경우 정답 반환
elif list[mid] < 10:
left = mid + 1 # 정답보다 작을 경우 left를 mid+1로 이동
elif list[mid] > 10:
right = mid -1 # 정답보다 클 경우 right를 mid-1로 이동
return mid
# 재귀함수
def binary_search_recursion(target, start, end, list):
if start > end:
return None
mid = (start + end) // 2
if list[mid] == target:
return mid
elif list[mid] > target:
end = mid - 1
else:
start = mid + 1
return binary_search_recursion(target, start, end, list)
컴퓨터의 성능을 이용하여 가능한 모든 경우의 수를 탐색하는 방법
효율성 관점에선 최악의 방법이나 무조건 원하는 값을 탐색할 수 있다는 장점
def solution(list):
for i in range(len(list)):
if list[i] == 10 :
return i
return -1