몇 분 안에 이진 검색

이진 검색은 정렬된 배열 내에서 주어진 요소의 인덱스를 반환하는 알고리즘입니다. 간단히 말해서, 원하는 요소의 가능한 위치 수가 하나로 줄어들 때까지 목록을 반으로 줄임으로써 이를 수행합니다.

이진 검색은 어떻게 작동합니까?
  • 다음 배열에서 요소 38의 위치를 ​​찾고 싶다고 가정해 보겠습니다.
  • 먼저 배열의 중간점을 찾습니다. mid = (low + high)/2 공식을 사용하여 중간점을 찾을 수 있습니다.
  • 38을 중간 요소와 비교하십시오. 25는 38보다 작기 때문에 전반부는 생략합니다. 후반부의 경우 낮음 = 중간 + 1입니다.
  • 대상 요소의 중간 지점까지 반복하고 인덱스(이 경우 6)를 반환합니다.

  • 파이썬으로 구현

    # iterative approach
    def iterative_binary_search(list, target):
        low = 0
        high = len(list) - 1
    
        while high > low:
            mid = math.floor((low + high) / 2)
            if list[mid] == target:
                return mid
            elif list[mid] < target:
                low = mid + 1
            else:
                high = mid - 1
    
        return -1
    
    # recursive approach
    def recursive_binary_search(list, target, low, high):
        if low < high:
            mid = math.floor((low + high) / 2)
    
            if list[mid] == target:
                return mid
            elif list[mid] < target:
                return recursive_binary_search(list, target, mid + 1, high)
            else:
                 return recursive_binary_search(list, target, low, mid - 1)
    
        return -1
    


    이진 검색의 시간 복잡도


    사례
    시간 복잡도


    최고
    오(1)

    평균
    O(로그 n)

    가장 나쁜
    O(로그 n)


  • 가장 좋은 경우는 대상 요소가 정확히 중앙에 위치하는 경우입니다.
  • 각 요소가 2개의 추가 요소로 분기되기 때문에 요소 수 = 2깊이입니다.
  • 최악의 경우는 트리의 가장 깊은 수준을 검색하는 경우입니다.
  • 깊이는 대략 log2n이며 여기서 n은 요소의 수입니다.

  • 이진 검색의 공간 복잡성
  • 반복 이진 검색은 배열의 크기에 관계없이 세 개의 포인터(시작점, 중간점 및 끝점을 추적하기 위해)가 필요합니다. 따라서 공간복잡도는 O(1)이다.
  • 반면 재귀 이진 검색에는 루프가 없으며 새 값이 다음 재귀 호출로 전달됩니다. 재귀 이진 검색의 시간 복잡도는 O(log n)입니다.
  • 좋은 웹페이지 즐겨찾기