Skip to content

Binary Seach

GitDeveloperKim edited this page May 12, 2021 · 21 revisions

Binary Search

  • Binary Search์—์„œ ์ฃผ์˜ํ•ด์•ผํ•  ์ ์€ while(left<=right)์—์„œ ๋“ฑํ˜ธ๋ฅผ ๊ผญ ๋ถ™์—ฌ์•ผ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•ˆ ๋ถ™์ด๊ฒŒ ๋˜๋ฉด, ์›์†Œ๊ฐ€ ํ•˜๋‚˜ ๋‚จ์•˜์„ ๋•Œ ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’๊ณผ ๋‚จ์•„์žˆ๋Š” ์›์†Œ๋ฅผ ๋น„๊ตํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ while ๋ฌธ์„ ๋น ์ ธ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ผญ ๋“ฑํ˜ธ๋ฅผ ๋ถ™์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐ˜๋Œ€๋กœ ๋ถ€๋“ฑํ˜ธ๋ฅผ ๋นผ๋ฉด lower bound๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์„๊ฒƒ

// ์žฌ๊ท€๋ฅผ ์ด์šฉํ•œ binary search
public static int binarySearch (int [] arr, int start, int end, int value) {
        int result = 0;
	int mid = (start+end)/2;
	if (value == arr[mid]) {
		result = arr[mid];
	} else if (value < mid) { 
           	result = binarySearch (arr,start, mid-1,value);
	} else if (value > mid) {
		result = binarySearch (arr,mid+1, end,value);
	} 
	return result;
}

// while ์„ ์ด์šฉํ•œ binary search
private static int binarySearch_while (int s, int e, int target) {
        int index = -1;
        // ๋“ฑํ˜ธ ๊ธฐํ˜ธ๊ฐ€ ๋“ค์–ด๊ฐ€์•ผํ•œ๋‹ค
	while (s <= e) {
		int mid = (s+e)/2;
                // target ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’, dp[mid] ๋ฐฐ์—ด์—์„œ ์ค‘์•™๊ฐ’
                if (target == dp[mid]) {
                    return mid; // ์ฐพ์Œ
		else if (target < dp[mid]) {
		    e = mid;   // ์ขŒ์ธก ํƒ์ƒ‰
		} else if (target > dp[mid]){
		    s = mid+1; // ์šฐ์ธก ํƒ์ƒ‰
		}
	}
	return index;  // ๊ฐ’
}

lower bound


private static int lower_bound (int s, int e, int target) {
	while (s < e) {
		int mid = (s+e)/2;
                // target ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’, dp[mid] ๋ฐฐ์—ด์—์„œ ์ค‘์•™๊ฐ’
		if (target <= dp[mid]) {
			e = mid;
		} else {
			s = mid+1;
		}
	}
	return e;  // end ๋ฆฌํ„ด
}

upper bound


private static int upperBound(List data, int target) {
    int begin = 0;
    int end = data.size()-1;
    
    while(begin < end) {
    	int mid = (begin + end) / 2;
        // ํƒ€๊ฒŸ ๊ฐ’ ๋ณด๋‹ค search ๊ฐ’์ด ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค๋ฉด
        if(data.get(mid) <= target) {
        	begin = mid + 1;
        }
        else {
        	end = mid;
        }
    }
    return end;
}

ํŒŒ๋ผ๋งคํŠธ๋ฆญ ์„œ์น˜

๋ฌธ์ œ ํ’€์ด

๋ฐฑ์ค€2805 ๋‚˜๋ฌด์ž๋ฅด๊ธฐ

Clone this wiki locally