【问题标题】:Find minimum element in an array of unsorted integers faster than O (n)?在未排序的整数数组中找到最小元素比 O (n) 更快?
【发布时间】:2014-08-25 01:22:16
【问题描述】:

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

【问题讨论】:

  • 搜索速度比O(n) 更快的唯一方法是先有一个排序数组。
  • @Cyber​​ 列表中的一些其他限制可能会导致比O(n) 更快的搜索。不仅是“排序”约束。
  • @Jefffrey 是的(例如“第一个元素是最小值”,如二进制最小堆),尽管这不会影响这里的答案,因为没有这样的约束。
  • @delnan 从来没有说过会。我只是说 Cyber​​ 所做的声明是……让我们说“不完整”。
  • 使用 Quantum Bogo Sort 成为可能! c2.com/cgi/wiki?QuantumBogoSort

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


【解决方案1】:

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

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

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

【讨论】:

  • 我编辑了答案。请审查它。如果发现编辑不当,则回滚。
  • @Nawaz 无论有没有“不”,答案是否有意义?您不知道元素是否小于 min,但您也无法知道它是否不小于 min。你真的什么都不知道,因为下一个元素在任何一种情况下都可能完全改变答案。
  • @RickyMutschlechner 这也是我的逻辑,但我认为 Nawaz 的编辑更合适,因为我们试图找到最小元素,所以不能说元素不更小,您不能声称该算法是正确的。
  • @Daniel 啊,是的。正确性证明。够公平的!
猜你喜欢
  • 1970-01-01
  • 2010-09-20
  • 2011-09-08
  • 1970-01-01
  • 2021-08-02
  • 2021-12-16
  • 1970-01-01
  • 2016-05-18
  • 1970-01-01
相关资源
最近更新 更多