O(N)算法如何也是O(N ^ 2)算法?

时间:2017-06-03 07:45:25

标签: algorithm big-o complexity-theory

我正在阅读有关Big-O Notation的文章

  

因此,任何O(N)算法也是O(N ^ 2)。

这对我来说似乎很困惑,我知道Big-O只给出了上限。

但是O(N)算法怎么也可以是O(N ^ 2)算法。

是否有任何例子?

我无法想到任何事情。

任何人都可以向我解释一下吗?

5 个答案:

答案 0 :(得分:4)

“上限”意味着算法采用不长于(即<=)那么长(因为输入大小倾向于无穷大,考虑了相关的常数因子)。

这并不意味着它真的需要这么久。

O(n)也是O(n log n),O(n 2 ),O(n 3 ),O(2 n )以及其他任何渐近大于n的东西。

如果您对相关数学感到满意,您也可以从the formal definition看到这一点。

答案 1 :(得分:3)

O符号可以天真地读作“小于”。

如果我告诉你x&lt;然后显然x <5且x <1。 6等等。

O(n)意味着,如果算法的输入大小为n(n可以是元素的数量,或者元素的大小或者在数学上描述输入大小的任何其他内容),则算法运行“关于n次迭代”。

更正式地说,这意味着算法中的步数x满足:

x&lt; k * n + C其中K和C是实数正数

换句话说,对于所有可能的输入,如果输入的大小是n,则算法执行不超过k * n + C步。

O(n ^ 2)是相似的,除了绑定是k n ^ 2 + C。因为n是自然数n ^ 2> = n所以定义仍然成立。确实如此,因为x&lt; k n + C然后x < k * n ^ 2 + C。

所以O(n)算法是O(n ^ 2)算法,O(N ^ 3算法)和O(n ^ n)算法等等。

答案 2 :(得分:1)

big-O的定义:

对于所有f(x),某些功能O(g(x))|f(x)| <= M|g(x)| iff x >= x0

显然,g1(x) <= g2(x)然后是|f(x)| <= M|g1(x)| <= M|g2(x)|

答案 3 :(得分:1)

对于某些为O(N)的东西,它意味着对于大的N,它对于某些固定的k小于函数f(N)= k * N.但它也小于k * N ^ 2。因此,对于所有m> 1,O(N)意味着O(N ^ 2),或更一般地,O(N ^ m)。

*我假设N> = 1,这对于大N来说确实如此。

答案 4 :(得分:0)

Big-O表示法描述了上限,但O(n)也是O(n ^ 2)并没有错。 O(n)alghoritms是O(n ^ 2)alghoritms的子集。正方形是所有矩形的子集,但不是每个矩形都是正方形。因此从技术上讲,O(n)alghoritm是O(n ^ 2)alghoritm是正确的,但它并不准确。