알고리즘 2 분 검색 버 전
서로 다른 수요 에 대해 우리 가 직면 한 2 분 의 1 을 찾 으 면 서로 다른 버 전이 있 을 것 이다. 내 가 최근 에 만난 몇 가지 버 전에 대해 잘 설명해 보 자.
이것 은 가장 흔히 볼 수 있 는 버 전 으로 코드 도 그리 어렵 지 않다.가장 흔히 볼 수 있 는 코드 는 다음 과 같다.
배열 A [left, right] 에서 원소 m 를 찾 습 니 다.
int binarySearch(int A[], int left, int right, int target)
{
int mid;
if(left > right)
{
cout << "find range error!" << endl;
return -1;
}
while(left <= right) // [ left, right ] ,
{
mid = left + (right-left)/2; //
assert( ( A[left] <= A[mid] ) && ( A[mid] <= A[right] )); //
if ( A[mid] == target ) return mid;
else if( A[mid] > target ) right = mid-1;
else left = mid + 1;
}
cout << target << " not exist in A" << endl;
return -1;
}
2 분 검색 의 재 귀 실현: (대부분의 경우 재 귀 가 적용 되 지 않 고 재 귀 함수 호출 비용 이 비교적 크 지만 여기 서 재 귀 버 전 을 실현 합 니 다.)
int binarySearchRecursion(int A[],int left, int right,int m)
{
if(left <= right)
{
int mid = left + (right-left)/2;
if(A[mid] == m) return mid;
else if(A[mid] > m)
{
right = mid-1;
binarySearchRecursion(A,left,right,m);
}
else
{
left = mid+1;
binarySearchRecursion(A,left,right,m);
}
}
// else, , , -1!!
else
{
return -1;
}
}
int binarySearchStartPos(int A[], int left, int right, int m)
{
int mid, tmid ;
if(left > right)
{
cout << "find range error !!" << endl;
return -1;
}
while(left <= right)
{
mid = left + (right-left)/2;
if(A[mid] == m) // m, , -1.
{
tmid = mid;
// , :[left right] m。
// 。 left right !!!
right = mid-1;
while(left <= right)
{
mid = left + (right-left)/2;
if(A[mid] == m){right = mid-1;tmid = mid;}
else if (A[mid] < m) left = mid + 1;
else;
}
return tmid;
}
else if(A[mid] > m) right = mid-1;
else left = mid+1;
}
cout << m << "not exist in A " << endl;
return -1;
}
주의: 이곳 의 모든 범위 의 축 소 는 상기 2 분 검색 과 다 릅 니 다. 배열 에 요소 m 가 존재 하 는 지 확인 한 후에 모든 단계 의 범 위 는 요소 m 가 반드시 고찰 하 는 하위 배열 에 있어 야 합 니 다.2 분 검색 의 최적화 문제 도 매우 중요 하 다. 2 분 검색 자체 의 시간 복잡 도 는 이미 매우 좋 지만 서로 다른 응용 에 대해 서로 다른 최적화 방식 을 사용 할 수 있다.예 를 들 어 (right - left) / 2 는 자 리 를 옮 겨 실현 하거나 배열 의 상하 표 가 경 계 를 넘 지 않도록 left + (right - left) / 2 를 사용 하여 실현 할 수 있다.월경 을 피하 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Java 이분 검색 알고리즘 실례 분석 실현본고는 자바 구현 이분 검색 알고리즘을 실례로 다루고 있다.여러분에게 참고할 수 있도록 나누어 드리겠습니다.구체적으로 다음과 같습니다. 1. 전제: 2분 찾기의 전제는 찾아야 할 수조가 이미 정렬되어 있어야 한다는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.