指数搜索
指数搜索也称为双倍搜索或疾驰搜索。该机制用于查找搜索关键字可能出现的范围。如果 L 和 U 是列表的上下限,则 L 和 U 都是 2 的幂。对于最后一部分,U 是列表的最后位置。因此,它被称为指数。
找到特定范围后,它使用二分搜索技术找到搜索键的确切位置。
指数搜索技术的复杂性
时间复杂度: O(1) 最好的情况。O(log2 i) 平均或最坏情况。其中 i 是存在搜索键的位置。
空间复杂度: O(1)
输入和输出
Input:A sorted list of data:
10 13 15 26 28 50 56 88 94 127 159 356 480 567 689 699 780 850 956 995
The search key 780
Output:
在以下位置找到的物品: 16
算法
binarySearch(array, start, end, key)
输入:一个排序的数组,开始和结束位置,以及搜索关键字
输出 -密钥的位置(如果找到),否则位置错误。
Beginif start <= end then
mid := start + (end - start) /2
if array[mid] = key then
return mid location
if array[mid] > key then
call binarySearch(array, mid+1, end, key)
else when array[mid] < key then
call binarySearch(array, start, mid-1, key)
else
return invalid location
End
exponentialSearch(array, start, end, key)
输入: 排序后的数组、开始和结束位置以及搜索键
输出: 密钥的位置(如果找到),否则位置错误。
Beginif (end – start) <= 0 then
return invalid location
i := 1
while i < (end - start) do
if array[i] < key then
i := i * 2 //将 i 增加为 2 的幂
else
terminate the loop
done
call binarySearch(array, i/2, i, key)
End
示例
#include<iostream>输出结果using namespace 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(array, start, mid-1, key);
return binarySearch(array, mid+1, end, key);
}
return -1;
}
int exponentialSearch(int array[], int start, int end, int key){
if((end - start) <= 0)
return -1;
int i = 1; // 作为 2^0 = 1
while(i < (end - start)){
if(array[i] < key)
i *= 2; //我将增加为 2 的幂
else
break; //当 array[i] 与关键元素交叉时
}
return binarySearch(array, i/2, i, key); //在较小范围内搜索项目
}
int main() {
int n, searchKey, loc;
cout << "输入项目数: ";
cin >> n;
int arr[n]; //创建一个大小为 n 的数组
cout << "输入项目: " << endl;
for(int i = 0; i< n; i++) {
cin >> arr[i];
}
cout << "输入搜索键在列表中搜索: ";
cin >> searchKey;
if((loc = exponentialSearch(arr, 0, n, searchKey)) >= 0)
cout << "在以下位置找到的物品: " << loc << endl;
else
cout << "在列表中找不到项目。" << endl;
}
输入项目数: 20输入项目:
10 13 15 26 28 50 56 88 94 127 159 356 480 567 689 699 780 850 956 995
输入搜索键在列表中搜索: 780
在以下位置找到的物品: 16
以上是 指数搜索 的全部内容, 来源链接: utcz.com/z/335636.html