Time complexity 在排序数组中搜索的时间复杂度下限是多少

Time complexity 在排序数组中搜索的时间复杂度下限是多少,time-complexity,Time Complexity,例如,在排序中,紧下限是N*log(N),其中N是数组的大小 在排序数组中搜索如何?我想是对数N,但我不是100%确定 此外,一切都是基于比较的,除了输入数组本身之外,不能使用任何其他外部内存 提前感谢是:仅使用比较在排序数组中搜索的下限为o(logn) 对于一个根本不严格的证明,为什么会这样,想象一下任何算法解决这个问题的决策树。树中的叶节点数等于n+1(每个位置一个结果和一个“未找到”结果)。因此,该树的最小深度必须为log₂ n、 搜索简单排序数组的最佳解决方案是二进制搜索,其时间复杂度为

例如,在排序中,紧下限是N*log(N),其中N是数组的大小

在排序数组中搜索如何?我想是对数N,但我不是100%确定

此外,一切都是基于比较的,除了输入数组本身之外,不能使用任何其他外部内存


提前感谢

是:仅使用比较在排序数组中搜索的下限为o(logn)


对于一个根本不严格的证明,为什么会这样,想象一下任何算法解决这个问题的决策树。树中的叶节点数等于n+1(每个位置一个结果和一个“未找到”结果)。因此,该树的最小深度必须为log₂ n、 搜索简单排序数组的最佳解决方案是二进制搜索,其时间复杂度为O(log₂(N) )。最坏的情况发生在搜索到的元素不在数组中,并且正好⌊日志₂(N) +1⌋ 迭代。看

我相信,在提到复杂性的上下限时,你只能谈论“紧密性”。下限(大ω)通常更难计算,并且通常不如上限(大O)有用。紧界(大θ)同时考虑了上界和下界


从技术上讲,下限是Ω(1),因为您可以在第一次比较中找到搜索到的元素。有关二进制搜索的时间复杂度的进一步讨论,请参阅。

我不太确定tight是什么意思,但我可以给您一个证明,O(logn)是问题的复杂度下限

问题复杂性讨论问题的一般复杂性,而不是算法复杂性

将数组中的元素与给定元素进行比较时,只有三个结果:

array[i]=element: stop
array[i]<element: search the first half
array[i]>element: search the second half
array[i]=元素:停止
数组[i]元素:搜索后半部分
这个过程可以用二叉树来表示。在最好的情况下,树的深度是O(logn)。因此,我们可以断言,没有算法比O(logn)更快,O(logn)是问题的时间下限

问题复杂度的上界由求解问题的任何算法的最低时间复杂度给出。存在复杂度为O(logn)的二进制搜索算法


至于搜索数组问题,上界和下界重合,因此问题复杂性为O(logn)。

这将取决于用于搜索的方法,是吗?并非所有的搜索都是平等创建的。(从技术上讲,随机行走是一种“搜索”,但不是很好的搜索)