-
Notifications
You must be signed in to change notification settings - Fork 0
Binary Seach
GitDeveloperKim edited this page Apr 8, 2021
·
21 revisions
- 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
- low bound
private static int lower_bound (int s, int e, int v) {
while (s < e) {
int mid = (s+e)/2;
// v 찾고자 하는 값, dp[mid] 배열에서 중앙값
if (v <= 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();
while(begin < end) {
int mid = (begin + end) / 2;
if(data.get(mid) <= target) {
begin = mid + 1;
}
else {
end = mid;
}
}
return end;
}