algorithm - 在进行指数搜索时,为什么我们选择指数的底数为 2?

标签 algorithm search language-agnostic

我们可以选择任何我们喜欢的基地,还是选择基地是因为它提供了最大的效率?

我在看 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,但成本是常数项的增加。我想 2 已经足够好了。

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

相关文章:

c++ - 通过附加和克隆子字符串构建字符串的算法

algorithm - 基数排序只使用稳定排序算法有什么必要?

algorithm - 判断多用户编辑文本 "Owner"

algorithm - 什么是可用于有效查找对象是否与一组模式中的任何一个匹配的算法/结构?

匹配字符串的正则表达式,但前提是同一行上的任何地方都不存在另一个字符串

c++ - 返回第 n 个斐波那契数的快速递归函数

mysql - 通过连接表搜索仅显示来自一个表的匹配数据

html - 搜索框和提交按钮未在 CSS 中对齐

.net - 最快的搜索技术/方法是什么? (在文件搜索的上下文中)

python - 防止在 Python 中的迭代期间使用值的倒数