알고리즘/탐색

이진 탐색(Binary Search)

아몬드바 2023. 7. 15. 13:32
728x90

이진 탐색 알고리즘은 1회 비교를 거칠 때마다 탐색 범위가 (대략) 절반으로 줄어드는 알고리즘

정렬된 리스트가 아니면 사용불가

def binary_search(element, some_list):
    start_index = 0
    end_index = len(some_list) - 1

    while start_index <= end_index:
        midpoint = (start_index + end_index) // 2
        # 찾고자하는 값이 앞쪽에 있음
        if some_list[midpoint] > element:
            end_index = midpoint - 1
        # 찾고자하는 값이 뒤쪽에 있음
        elif some_list[midpoint] < element:
            start_index = midpoint + 1
        # 찾고자하는 값이 리스트의 중간값이랑 같을때
        else:
            return midpoint
    return None;

리스트의 길이가 16일때 

가장빨리 찾는 방법은 맨 처음 원소를 찾을때 1번의 연산(가운데 값을 바로 찾음)

가장오래 걸리는 방법은 리스트 내에 원소가 없을때 총 4번의 연산

-> 16 / 2(1회)

-> 8 / 2(2회)

-> 4 / 2(3회)

-> 2 / 2(4회)

728x90