Computer >> 컴퓨터 >  >> 프로그램 작성 >> 프로그램 작성

지수 검색


지수 검색은 두 배 또는 질주 검색이라고도 합니다. 이 메커니즘은 검색 키가 표시될 수 있는 범위를 찾는 데 사용됩니다. L과 U가 목록의 상한과 하한이면 L과 U는 모두 2의 거듭제곱입니다. 마지막 섹션의 경우 U는 목록의 마지막 위치입니다. 이러한 이유로 지수라고 합니다.

특정 범위를 찾은 후 이진 검색 기법을 사용하여 검색 키의 정확한 위치를 찾습니다.

지수 검색 기법의 복잡성

  • 시간 복잡성: 최상의 경우 O(1)입니다. O(log2 i)는 평균 또는 최악의 경우입니다. 여기서 i는 검색 키가 있는 위치입니다.
  • 공간 복잡성: O(1)

입력 및 출력

입력:정렬된 데이터 목록:10 13 15 26 28 50 56 88 94 127 159 356 480 567 689 699 780 850 956 995검색 키 780>출력:위치에서 찾은 항목
알고리즘

binarySearch(배열, 시작, 끝, 키)

입력 : 정렬된 배열, 시작 및 종료 위치, 검색 키

출력 - 키의 위치(발견된 경우), 그렇지 않으면 잘못된 위치입니다.

start <=end then mid :=start + (end - start) /2인 경우 array[mid] =key이면 시작하고 array[mid]> key이면 중간 위치를 반환하고 binarySearch(array, mid+1, end, key) else when array[mid]  

exponentialSearch(배열, 시작, 끝, 키)

입력: 정렬된 배열, 시작 및 종료 위치, 검색 키

출력: 키의 위치(발견된 경우), 그렇지 않으면 잘못된 위치입니다.

Begin if (end – start) <=0 then 유효하지 않은 위치 반환 i :=1 while i <(end - start) do if array[i]  

예시

#include네임스페이스 사용 std;int binarySearch(int array[], int start, int end, int key) { if(start <=end) { int mid =(start + (end - start) / 2); //목록의 중간 위치 if(array[mid] ==key) return mid; if(array[mid]> key) return binarySearch(배열, 시작, mid-1, 키); 반환 바이너리검색(배열, 중간+1, 끝, 키); } return -1;}int exponentialSearch(int array[], int start, int end, int key){ if((end - start) <=0) return -1; 정수 i =1; // as 2^0 =1 while(i <(end - start)){ if(array[i] > n; 정수 [n]; //크기가 n인 배열 생성 cout <<"항목 입력:" <> arr[i]; } cout <<"목록에서 검색할 검색키를 입력하세요:"; 신>> 검색 키; if((loc =exponentialSearch(arr, 0, n, searchKey))>=0) cout <<"위치에서 항목을 찾았습니다:" < 

출력

항목 수 입력:20항목 입력:10 13 15 26 28 50 56 88 94 127 159 356 480 567 689 699 780 850 956 995목록에서 검색할 검색 키 입력:780