📜  指数搜索(1)

📅  最后修改于: 2023-12-03 15:39:47.625000             🧑  作者: Mango

指数搜索

指数搜索(Exponential Search)是一种用于在有序数组中查找特定元素的算法。它是通过先确定一个范围,然后逐步增加范围的大小来逼近要查找的元素的位置。这种算法的时间复杂度为O(log n),比传统的二分搜索还要更有效率。

算法步骤
  1. 确定待查找元素在有序数组中的位置范围,默认初始值为 1。
  2. 将位置范围扩大为2的幂次方,每次扩大时需要检查新的位置是否超出数组长度,如果超出则范围为数组长度。
  3. 在当前位置范围内使用二分搜索寻找待查找元素。
  4. 如未找到元素,则重复步骤2和3,直到找到元素或者范围已经超出数组长度。
代码实现
def exponential_search(arr, target):
    if arr[0] == target:
        return 0
    n = len(arr)
    i = 1
    while i < n and arr[i] <= target:
        i = i*2
    return binary_search(arr, target, i//2, min(i, n-1))

def binary_search(arr, target, left, right):
    while left <= right:
        mid = (left + right) // 2
        if arr[mid] == target:
            return mid
        elif arr[mid] < target:
            left = mid + 1
        else:
            right = mid - 1
    return -1
示例运行
arr = [1, 3, 5, 7, 9, 11]
target = 7
print(exponential_search(arr, target)) # Output: 3

以上是指数搜索的介绍及代码实现。由于其对二分查找的优化,所以对于大型有序数组来说,在时间复杂度方面要更加高效。