算法作为练习

时间:2011-06-28 02:33:00

标签: algorithm

所以大多数人都应该知道max_element(unsorted_array)可以在O(n)时间内解决。我意识到虽然很容易计算出来,但似乎在一个不太理想的解决方案中解决它会更加困难,例如n*log(log(n))时间。现在显然一个算法可能只是O(n + n*log(log(n)) ),其中更耗时的部分算法没有真正的目的。同时,您可以使用常规O(n)算法log(log(n))次。这些都不是很有趣。

所以我的问题是,是否有一种算法可以找到一组数字中的最大元素(存储在您选择的容器中),其方式是没有冗余循环或操作,但是Θ{{1 }

3 个答案:

答案 0 :(得分:3)

答案 1 :(得分:2)

这里有一个基本的误解:

O(n + n * log(log(n)))与O(n log(log(n)))完全相同

请仔细阅读维基页面:http://en.wikipedia.org/wiki/Big_O_notation

Big-O符号是渐近的。这意味着对于所有函数f,g,O(f(n)+ g(n))= O(max(f(n),g(n)))。这不是一招,他们真的是平等的。

O(n ^ 2),O(n)等符号是函数,它们是;具体而言,O(f(n))表示“渐近地小于或等于常数f(n)的所有函数的集合”。如果f(n)> = g(n),则O(f(n))包含O(g(n)),因此将g(n)加到该等式中不会改变任何内容。

答案 2 :(得分:0)

如何证明无法完成。

理论:可以在不检查每个元素的情况下确定未排序数组的最大元素。

  • 假设您已经检查了n(n> 1)个项目的未排序数组中除了一个元素之外的所有元素。
  • 阵列的最大元素有两种可能性。
    • 你见过的最大元素(n-1)。
    • 你没见过的一个元素

未审查的元素可能更大(除非被检查的元素是可表示的绝对最大值);数组未排序。

结果:矛盾。您必须检查第n个元素以确定最大值(在数学上下文中;您可以在一个可能罕见的情况下在计算机科学中采用捷径)

因为n对此有什么价值并不重要,它应该适用于除退化情况之外的所有n(n = 1)

如果这不是有效回复,我可能不清楚要求......?