๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜/์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด๋ก 

์ด์ง„ ํƒ์ƒ‰ - ์•Œ๊ณ ๋ฆฌ์ฆ˜

by sh119 2024. 7. 20.

๐Ÿ‘ฉ‍๐Ÿ’ป  ์ด์ง„ ํƒ์ƒ‰ (Binary Search) ๋ž€?

์ด์ง„ ํƒ์ƒ‰์€ (= ์ด๋ถ„ ํƒ์ƒ‰) ์ •๋ ฌ๋œ ์ƒํƒœ์˜ ๋ฐ์ดํ„ฐ์—์„œ ํŠน์ • ๊ฐ’์„ ๋น ๋ฅด๊ฒŒ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

  • ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’๊ณผ ๋ฐ์ดํ„ฐ ์ค‘์•™์— ์žˆ๋Š” ๊ฐ’์„ ๋น„๊ต
  • ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’์ด ๋” ์ž‘์œผ๋ฉด ๋ฐ์ดํ„ฐ ์™ผ์ชฝ ๋ถ€๋ถ„์—์„œ ์ด์ง„ ํƒ์ƒ‰
  • ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’์ด ๋” ํฌ๋ฉด ๋ฐ์ดํ„ฐ ์˜ค๋ฅธ์ชฝ ๋ถ€๋ถ„์—์„œ ์ด์ง„ ํƒ์ƒ‰

 

โœ๏ธ ์‹œ๊ฐ„ ๋ณต์žก๋„

์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‹œ๊ฐ„ ๋ณต์žก๋„ : O(logN)

 

โœ๏ธ ์ด์ง„ ํƒ์ƒ‰ ๊ณผ์ •

* ๋ฐ์ดํ„ฐ๊ฐ€ ์šฐ์„  ์ •๋ ฌ๋œ ์ƒํƒœ์—ฌ์•ผ ์ด์ง„ ํƒ์ƒ‰ ์ง„ํ–‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์ฐพ๊ณ ์ž ํ•˜๋Š” ๋ฐ์ดํ„ฐ x๋ฅผ ๊ธฐ์ค€์œผ๋กœ mid ๊ฐ’๊ณผ ๋น„๊ตํ•˜์—ฌ ๋ฒ”์œ„๋ฅผ ์ค„์—ฌ๋‚˜๊ฐ€๋ฉฐ ์ฐพ์•„๊ฐ€๋Š” ๋ฐฉ์‹์ด๋‹ค.

 

โœ๏ธ ์ด์ง„ ํƒ์ƒ‰ ๊ตฌํ˜„ ๊ณผ์ •

โœจ ๋ฐ˜๋ณต๋ฌธ ๊ตฌ์กฐ

public class Main{
	public static int binarySearch(int arr[], int target){
    	int left = 0;
        int right = arr.length - 1;
        
        while(left <= right){
        	int mid = (left + right) / 2;
            
            if(target == arr[mid]){
            	return mid;
            }else if(target < arr[mid]{
            	right = mid - 1;
            }else{
            	left = mid + 1;
            }
        }
        
        return -1;
    }
}

 

 

โœจ ์žฌ๊ท€ ํ˜ธ์ถœ ๊ตฌ์กฐ

public class Main{

	public static int binarySearch2(int[] arr, int target, int left, int right){
    	if(left > right){
        	return -1;
        }
        int mid = (left + right) / 2;
        
        if(target == arr[mid]){
        	return mid;
        }else if(target < arr[mid]){
        	return binarySearch2(arr, target, left, mid-1);
        }else{
        	return binarySearch2(arr, target, mid+1, right);
        }
    }

}

 

 

โœ๏ธ Java์—์„œ ๊ธฐ๋ณธ ์ œ๊ณต ๋˜๋Š” Binary Search

Arrays.binarySearch(arr, 1); // ๋ฐฐ์—ด arr์—์„œ 1์„ ์ฐพ๋Š” ๊ฒฝ์šฐ
Arrays.binarySearch(arr, 10); // ๋ฐฐ์—ด arr์—์„œ 10์„ ์ฐพ๋Š” ๊ฒฝ์šฐ

 

๋งŒ์•ฝ, ๋ฐฐ์—ด์—์„œ binarySearch๋ฅผ ์‚ฌ์šฉํ–ˆ์„๋•Œ ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’์ด ์—†๋‹ค๋ฉด 

์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’์ด ์žˆ์—ˆ๋‹ค๋ฉด ์žˆ์–ด์•ผ ํ•  ์œ„์น˜์˜ index * (-1) ๊ฐ’์ด ๋ฐ˜ํ™˜๋œ๋‹ค.

์ฆ‰, ๊ทธ ๊ฐ’์ด ์žˆ์—ˆ์–ด์•ผ ํ•  ์ž๋ฆฌ์˜ ์ธ๋ฑ์Šค ๊ฐ’์— ๋งˆ์ด๋„ˆ์Šค๊ฐ€ ๋ถ™์€ ๊ฐ’์ด ๋ฐ˜ํ™˜๋œ๋‹ค.

 

(ex)

if arr = {1,2,3,5,6,7}, search value = 4

then, Arrays.binarySearch(arr,4) running -3 (4๊ฐ€ ์กด์žฌํ–ˆ๋‹ค๋ฉด index 3๋ฒˆ ์œ„์น˜์— ์žˆ์—ˆ์–ด์•ผ ํ•˜๋ฏ€๋กœ)