Just Fighting

[Python] 이진 탐색(Binary Search) 본문

Algorithm/개념 정리

[Python] 이진 탐색(Binary Search)

yennle 2022. 1. 26. 20:37
728x90

N개의 정렬된 숫자가 있으면

숫자의 개수를 반씩 줄여나가면서 원하는 숫자를 찾는 탐색 방법이다.

 

이진 탐색의 시간 복잡도 : O(logN)

 

 

<기본 코드>

target의 인덱스를 찾아라.

def binarySearch(data, target):
    start = 0
    end = len(data)-1

    while start <= end:
        mid = (start + end) // 2

        if data[mid] < target : start = mid + 1
        elif data[mid] > target : end = mid - 1
        else : return mid

    return -1
<실행 결과>

 

 

 

 

내가 찾는 수가 리스트에 없을 경우

end의 초기값while이 실행되는 조건, whlie문 안에 if-else문이 달라진다.

 

 

<lower bound>

target보다 크거나 같은 수가 시작되는 인덱스를 찾아라.

def binarySearch_lower(data, target):
    start = 0
    end = len(data)

    while start < end:
        mid = (start + end) // 2

        if data[mid] < target : start = mid + 1
        else : end = mid

    return end
<실행 결과>

<실행 결과>




 

 

<upper bound>

target보다 큰 수가 시작되는 인덱스를 찾아라.

def binarySearch_upper(data, target):
    start = 0
    end = len(data)

    while start < end:
        mid = (start + end) // 2

        if data[mid] <= target : start = mid + 1
        else : end = mid

    return end
<실행 결과>

<실행 결과>

 

728x90
Comments