설계 전략
장점 : 문제를 나눔으로써 어려운 문제를 해결할 수 있다는 엄청나게 중요한 장점이 있다. 그리고 이 방식이 그대로 사용되는 효율적인 알고리즘들도 여럿 있으며, 문제를 나누어 해결한다는 특징상 병렬적으로 문제를 해결하는 데 큰 강점이 있다.
단점: 함수를 재귀적으로 호출한다는 점에서 함수 호출로 인한 오버헤드가 발생하며, 스택에 다양한 데이터를 보관하고 있어야 하므로 스택 오버플로우가 발생하거나 과도한 메모리 사용을 하게 되는 단점
N2 = N x N
N3 = N x N x N
...
Nn = N x N x N ... N
N8 = N4 x N4 = ((N2)2)2
Nn = N x N x N = (N)2 x N
자료의 가운데에 있는 항목의 키 값과 비교하여 다음 검색의 위치를 결정하고 검색을 계속 진행하는 방법
이진 검색을 하기 위해서는 자료가 정렬된 상태여야 한다.
검색 과정
binarySearch(arr[], n, answer)
start = 0;
end = n-1;
while(start<=end){
mid = (start+end)/2
if(arr[mid] == key)
return mid;
else if(arr[mid] < key)
start = mid+1;
else if(arr[mid] > key)
end = mid-1;
}
binarySearch(arr[], start, end, answer)
if(start>end)
return -1;
else{
mid = (start + end) / 2;
mid = (start+end)/2
if(arr[mid] == key)
return mid;
else if(arr[mid] < key)
return binarySearch(arr[], mid+1, end, answer);
else if(arr[mid] > key)
return binarySearch(arr[], start, mid -1, answer);