[Algorithm] 이진 탐색 (python)

19·2022년 8월 2일
0

Algorithm

목록 보기
5/28

이진 탐색

이진 탐색은 탐색 시, 범위를 반으로 좁혀가며 탐색하는 것을 의미한다.

1~16범위의 배열이 있고 '14'를 탐색하는 상황

finding_target = 14
finding_numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]

def is_existing_target_number_binary(target, array):
    # 구현해보세요! (이진 탐색)
    current_min = 0                 # 최소값
    current_max = len(array) - 1    # 최대값
    current_guess = (current_min + current_max) // 2    # 중위값

    while current_min <= current_max:
        if array[current_guess] == target:
            return True
        elif array[current_guess] < target:
            # 최소값을 변경
            current_min = current_guess + 1
        else:
            # 최대값을 변경
            current_max = current_guess - 1
        current_guess = (current_min + current_max) // 2
    return False

result = is_existing_target_number_binary(finding_target, finding_numbers)
print(result)
  • 탐색을 하기위해 범위를 설정한다 (인덱스값을 바탕으로 탐색)
    • 최소값, 최대값 인덱스를 정하고, 범위를 반으로 좁혀가며 탐색하도록

[출력]
True

시간복잡도

  • O(log n)
    • 데이터 범위를 반으로 좁혀가며 탐색을 하기 때문에, 한 번 동작할 때마다 탐색 범위가 절반으로 줄어든다
    • 연산량이 반으로 줄어들면 O(log n)

주의할 점은, 이진 탐색은 정렬된 상태의 데이터일때만 가능하다.
정렬되어 있지 않은 데이터에서 이진 탐색을 사용하면, 원하는 동작이 이루어지지 않는다

profile
하나씩 차근차근

0개의 댓글

관련 채용 정보