什么是在排序数组中搜索的紧密的较低时间复杂度

时间:2011-12-19 18:16:57

标签: time-complexity

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

在排序数组中搜索怎么样?我认为这是log(N),但我并不是100%肯定。

一切都是基于比较,没有任何其他外部存储器可以使用输入数组本身

提前致谢

3 个答案:

答案 0 :(得分:1)

是:仅使用比较搜索排序数组的下限是 o(log n)

对于一个非常严格的证明,为什么会出现这种情况,想象一下解决这个问题的任何算法的决策树。树中叶子节点的数量等于 n + 1 (每个位置一个结果和“未找到”结果)。因此,这棵树的最小深度必须是 log 2 n 的数量级。

答案 1 :(得分:1)

我不太确定是什么意思,但我可以给你一个证据,证明O(log n)是问题的较低复杂性界限。

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

比较元素和给定元素中的元素只有三个结果:

array[i]=element: stop
array[i]<element: search the first half
array[i]>element: search the second half

此过程可以由二叉树表示。在最好的情况下,树的深度是O(log n)。因此,我们可以断言没有算法比O(log n)更快,这是问题时间的下限。

问题复杂性的上限由解决问题的任何算法的最低时间复杂度给出。存在二进制搜索算法,其复杂度为O(log n)。

对于搜索数组问题,上限和下限重合,因此问题复杂度为O(log n)。

答案 2 :(得分:-2)

搜索简单排序数组的最佳解决方案是二进制搜索,其时间复杂度为O(log 2(N))。最糟糕的情况发生在搜索的元素不在数组中时,并且完全采用⌊log2(N)+1⌋次迭代。请参阅Binary Search Performance

我相信在提到复杂性的上限和下限时,你只能谈论“紧张”。下限(大欧米茄)通常更难计算,并且通常不如上限(大O)有用。紧束缚(大Theta)考虑了上限和下限。

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