ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 이진 탐색, bisect 라이브러리
    Algorithms in Python/notes 2021. 1. 21. 23:25

    이진 탐색 (Binary Search)

    데이터가 정렬되어있을 때, 탐색 범위를 반으로 줄여가며 데이터를 빠르게 탐색하는 방법이다.

    - 시작점, 끝점, 중간점을 이용한다.

    - 중간점을 이용해서 탐색 범위를 줄여나간다.

     

     재귀 함수로 구현한 이진 탐색 소스코드

    def binary_search(arr, target, start, end):
        if start > end:
            return None
        mid = (start + end) // 2
        # 찾은 경우 인덱스 반환
        if arr[mid] == target:
            return mid
        # 중간값보다 target이 작은 경우 왼쪽 부분 확인
        elif arr[mid] > target:
            return binary_search(arr, target, start, mid - 1)
        # 중간값보다 target이 큰 경우 오른쪽 부분 확인
        else:
            return binary_search(arr, target, mid + 1, end)

     

     반복문으로 구현한 이진 탐색 소스코드

    def binary_search(arr, target, start, end):
        while start <= end:
            mid = (start + end) // 2
            # 찾은 경우 인덱스 반환
            if arr[mid] == target:
                return mid
            # 중간값보다 target이 작은 경우 왼쪽 부분 확인
            elif arr[mid] > target:
                end = mid - 1
            # 중간값보다 target이 큰 경우 오른쪽 부분 확인
            else:
                start = mid + 1
        return None

     

    이진 탐색의 시간복잡도

    절반씩 줄어듦 -> O(logN)

     


    파이썬 bisect 라이브러리를 이용한 이진탐색

    bisect

     bisect_left(a, x) : 정렬된 순서를 유지하면서 리스트 a에 데이터 x를 삽입할 가장 왼쪽 인덱스를 찾는 메서드

     bisect_left(a, x) : 정렬된 순서를 유지하면서 리스트 a에 데이터 x를 삽입할 가장 오른쪽 인덱스를 찾는 메서드

    • 시간 복잡도: O(logN)

     

     

    * 이것이 코딩테스트다 with 파이썬 - 나동빈

    'Algorithms in Python > notes' 카테고리의 다른 글

    Union-Find 알고리즘  (0) 2021.02.07
    DFS / BFS  (0) 2021.01.29
    파이썬의 정렬 라이브러리  (0) 2021.01.20
    정렬  (0) 2021.01.20
    다이나믹 프로그래밍  (0) 2021.01.13

    댓글

Designed by Tistory.