我们可以选择我们喜欢的任何一个基地,还是选择它的基地,因为它提供了最大的效率?
我在研究this算法。基本上是这样的:

template <typename T>
int exponential_search(T arr[], int size, T key) {
    if (size == 0) {
        return NOT_FOUND;
    }

    int bound = 1;
    while (bound < size && arr[bound] < key) {
        bound *= 2;
    }


    return binary_search(arr, key, bound/2, min(bound + 1, size));
}

或与python等效的:
def exponential_search(arr, p):
i = 0
while (arr[2 ** i] < p):
    i += 1
binary_search(arr, p, i)

在第二个while循环中可以清楚地看到,它们正在设置
bound *=2

为什么是2?为什么没有其他号码?

最佳答案

撇开实现困难不谈,用k乘子搜索n位置的代价是log(n)/log(k)+log((k-1)n)+o(1)=log(n)/log(k)+log(n)+log(k-1)+o(1)。通过增加k,我们可以使常数因子逼近,但不能达到1,而代价是常数项的增加我想两个已经足够了。

关于algorithm - 在进行指数搜索时,为什么选择指数的底数为2?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55103311/

10-11 17:53