알고리즘/Search

Binary Search

조규현15 2023. 4. 29. 22:43
반응형

이분검색 ( Binary Search )

  • Time : O ( logN )
  • Space : O ( n )

 

탐색을 요구하는 대상은 정렬이 필요하다 ( "오름차순" 이 아니여도 상관없다. 방향에 따른 pivot 위치만 바꾸면 된다 )

( 정렬은 다른 포스팅에서 다루기로 한다 )

 

정렬된 대상의 중간 값으로 찾는 값의 크고 작음을 이분하여 다음 순서에 탐색하는 공간을 반씩 줄여간다.

전체 공간을 반씩 줄여가기 때문에 탐색 공간이 log(2) 로 줄어든다.

탐색 공간이 더 이상 없으면 ( low > high ) 탐색에 실패한다.

function search(arr, x) {
	
    const length = arr.length;
    let low = 0;
    let high = length;
    let mid;
    let idx = 0; // result
    
    while (low < hight && idx == 0) {
    	mid = Math.floor( (low + high) / 2 ); // Round Down
        if (x == arr[mid]) {
        	idx = mid;
            // success
            return idx;
        } else if (x < arr[mid]) {
        	high = mid - 1; // move right    
        } else {
        	low = mid + 1; // move left
        }
    }
    
    // fail
    return -1;
}
반응형

'알고리즘 > Search' 카테고리의 다른 글

이진검색 트리 ( binary search tree )  (0) 2023.05.07
Sequential Search  (0) 2023.04.29