[알고리즘] 이진 검색 [Binary Search]

    728x90
    반응형

    [알고리즘] 이진 검색 [Binary Search]

    이진 검색(Binary Search)은 정렬된 배열에서 특정 값을 효율적으로 찾기 위한 알고리즘입니다.

    이 알고리즘은 다음과 같은 단계를 따릅니다

     

     

     

    주의

    이진 검색은 분류된 배열을 대상으로만 작동함으로 데이터가 분류되어있어야 한다.

    낮은 수에서 큰 수로, 알파벳 순으로 등등 순서가 있어야 한다.

     

     

     

     

    기본 개념

    분할 정복 (divide and conquer)

    배열을 중간을 기준으로 나누고, 그 중간의 죄측 절반 / 우측 절반에 있을지 확인

     

     

     

     

     

    이진 검색 방법

    중간 값 확인

    배열의 중간 값을 확인합니다.

     

     

    비교

    찾고자 하는 값과 중간 값을 비교합니다.

    • 찾고자 하는 값이 중간 값보다 작으면, 배열의 왼쪽 절반을 탐색합니다.
    • 찾고자 하는 값이 중간 값보다 크면, 배열의 오른쪽 절반을 탐색합니다.

     

    반복

    배열의 크기가 0이 될 때까지 이 과정을 반복합니다.

     

     

    이진 검색은 배열이 정렬되어 있을 때만 사용할 수 있으며, 시간 복잡도는 O(log n)입니다.

     

     

     

     

    예시

    정렬된 배열과 값을 받아들이고 값이 존재하는 경우 그 인덱스를 반환하는 binarySearch라는 함수를 작성합니다.

    값이 존재하지 않으면 -1을 반환합니다.

    이 알고리즘은 linearSearch 보다 더 효율적일 것입니다.

    function binarySearch(arr, num){
        let start = 0;
        let end = arr.length - 1;
        let middle  = Math.floor((start + end) / 2)
        while(arr[middle] !== num && start <= end) {
            if (arr[middle] > num) end = middle - 1;
            else start = middle + 1;
            middle = Math.floor((start + end) / 2);
        }
        return arr[middle] === num ? middle : -1;
    }
    
    binarySearch([2, 5, 6, 9, 13, 15, 28, 30], 13);

     

     

     

     

     

    이진 검색의 시간 복잡도? (Big O)

     

     

     

     

     

     

    참조!

    https://www.udemy.com/course/best-javascript-data-structures/

     

    728x90
    반응형

    댓글