지수 검색
이중 검색 또는 손가락 검색이라고도하는 지수 검색은 거대한 크기의 배열에서 요소를 검색하기 위해 만들어진 알고리즘입니다. 이것은 2 단계 과정입니다. 먼저 알고리즘은 타겟 요소가있는(L, R)
범위를 찾고이 범위 내에서 이진 검색을 사용하여 타겟의 정확한 위치를 찾습니다.
인덱스pow(2, k)
의 요소가 목표보다 큰 첫 번째 지수k
를 검색하여 범위 보유 요소를 찾기 때문에 지수 검색이라고합니다. 이름은 지수 검색이지만이 알고리즘의 시간 복잡도는 로그입니다. 배열의 크기가 무한하고 이진 검색보다 훨씬 빠르게 솔루션에 수렴 할 때 매우 유용합니다.
지수 검색 알고리즘
n
요소를 포함하는 정렬되지 않은 배열A[]
가 있다고 가정하고X
요소를 찾으려고합니다.
-
첫 번째 요소 자체가 대상 요소인지 확인합니다 (예 :
A[0] == X
). -
i
를1
로 초기화합니다. -
i <n
및A[i] <= X
동안 다음을 수행합니다.i
를2
의 거듭 제곱 즉,i = i * 2
로 증가시킵니다.
-
i/2
~min(i, n-1)
범위에 이진 검색을 적용합니다.
지수 검색 예
(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
배열이 있고 X-10
을 찾고 싶다고 가정합니다.
-
i
를1
로 초기화 -
A[1]
=2
<10
따라서i
를2
로 증가시킵니다. -
A[2]
=3
<10
따라서i
를4
로 증가시킵니다. -
A[4]
=5
<10
따라서i
를8
로 증가시킵니다. -
A[8]
=9
<10
따라서i
를16
으로 증가시킵니다. -
i
=16
>n
따라서i / 2
즉8
~min(i, n-1)
즉min(16, 10) = 10
-
lo
를i / 2 = 8
로 초기화하고hi
를min(i, n-1) = 10
으로 초기화합니다. -
중간
을9
로 계산합니다. -
10
==10
즉,A[9] == X
, 따라서9
를 반환합니다.
지수 검색 알고리즘 구현
#include <bits/stdc++.h>
using namespace std;
int binarySearch(int arr[], int lo, int hi, int x) {
while (lo <= hi) {
int m = lo + (hi - lo) / 2;
if (arr[m] == x) return m;
if (arr[m] < x)
lo = m + 1;
else
hi = m - 1;
}
return -1;
}
int exponentialSearch(int arr[], int n, int x) {
if (arr[0] == x) return 0;
int i = 1;
while (i < n && arr[i] <= x) i = i * 2;
return binarySearch(arr, i / 2, min(i, n - 1), x);
}
int main() {
int n = 11;
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
int x = 10;
int result = exponentialSearch(arr, n, x);
if (result == -1) {
cout << "Element not found !!";
} else
cout << "Element found at index " << result;
return 0;
}
지수 검색 알고리즘 복잡성
시간 복잡성
- 평균 사례
평균 케이스 시간 복잡도는O(logi)
입니다. 여기서i
는 배열 내 대상 요소X
의 인덱스입니다. 요소가 배열의 시작 부분에 가까워지면 이진 검색보다 성능이 뛰어납니다.
- 베스트 케이스
가장 좋은 경우는 비교하는 요소가 검색중인 요소이고 첫 번째 반복에서 반환 될 때 발생합니다. 최상의 경우 시간 복잡도는O(1)
입니다.
- 최악의 경우
최악의 시간 복잡성은 평균 시간 복잡성과 동일합니다. 최악의 시간 복잡도는O(logi)
입니다.
공간 복잡성
이 알고리즘의 공간 복잡도는 임시 변수 외에 추가 공간이 필요하지 않기 때문에O(1)
입니다.
Harshit Jindal has done his Bachelors in Computer Science Engineering(2021) from DTU. He has always been a problem solver and now turned that into his profession. Currently working at M365 Cloud Security team(Torus) on Cloud Security Services and Datacenter Buildout Automation.
LinkedIn