在比O(n)更快的未排序整数数组中找到最小元素?

时间:2014-07-03 19:24:23

标签: c++ c algorithm sorting data-structures

是否可以通过比O(n)时间复杂度更快的速度找到未排序整数数组的最小元素。 空间复杂性不是问题。

1 个答案:

答案 0 :(得分:19)

不,这是不可能的。给定一个任意数组的元素,你必须至少查看一次每个元素,以明确地说明你找到了最小元素。这意味着必要的时间复杂度为Ω(n) (see here for more information on Big Omega notation),这意味着*找到最小元素的任何算法都将至少进行c * n次操作,其中c是常量(在这种情况,c >= 1)。

换句话说,如果算法花费的n次操作少于{{1}},那么算法中至少必须有一个算法没有通过的元素。由于我们没有关于这个元素的信息(数组是任意的),我们不能说这个元素不小于算法声明的最小元素。所以算法不正确。

*请注意,这不是Big-Omega符号的正式含义,但它得到了重点。您可以阅读正式定义here