algorithm - 通过多个元素进行二分查找

标签 algorithm time-complexity binary-search

我在考试时遇到了这个问题,

我有一台非常慢的计算机,对具有 1,000(一千)个元素的数组进行二分搜索需要一秒钟。我应该期望计算机在具有 1,000,000(一百万)个元素的数组上进行二分搜索需要多长时间?

我无法理解这一点,搜索 100 万个元素会比搜索 1,000 个元素花费更长的时间,还是取决于计算机?

最佳答案

二分查找的时间复杂度为O(log(N)),完成时间为

t = c * log(N, 10)

在给定的N = 1000情况下,我们知道t,因此我们可以找出c

1 = c * log(1000, 10) 

1 = c * 3

c = 1/3

对于N = 1000000,我们有

t = 1 / 3 * log(1000000, N) =
  = 1 / 3 * 6 = 
  = 2

因此我们可以预期 1000000 项内的二分搜索将在 2 秒内完成。

请注意,O(log(N)) == O(log(N, m)),因为 log(N, m) == log(N, k)/log(m, k),这意味着在使用 O(log(N)) 时,我们可以自由选择对数底数。在我们的例子中(10001000000),使用基数 10(或 1000)会很方便

关于algorithm - 通过多个元素进行二分查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69921477/

相关文章:

java - 在字符串的增长数据结构中搜索子串

algorithm - 使用 timeit 或 time 计时两个算法(python)

java - 如何降低 "put"函数的时间复杂度

algorithm - 合并 K 个排序链表,为什么复杂度是 O(N * K * K),而不是 O(N * K)

c++ - C++ lower_bound()搜索最接近目标值的元素

algorithm - 连续数的总和性质

algorithm - 如何使用动态规划接近路由路径

Java简单应用程序复杂性

java - 标记上的语法错误、结构错误 - 二分搜索方法中的错误

c++ - 对 C++ 字符串的二进制搜索不起作用