我正在阅读有关Big-O Notation的文章
因此,任何O(N)算法也是O(N ^ 2)。
这对我来说似乎很困惑,我知道Big-O只给出了上限。
但是O(N)算法怎么也可以是O(N ^ 2)算法。
是否有任何例子?
我无法想到任何事情。
任何人都可以向我解释一下吗?
答案 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是正确的,但它并不准确。