我只是不确定......
如果您的代码可以执行以下任何一种复杂功能:
首选版本是可以线性时间执行的版本。是否会有一段时间O(n)的序列太多而O(n²)会更受欢迎?换句话说,语句C x O(n)<对于任何常数C,O(n²)总是为真?
为什么或为什么不呢?有哪些因素会影响这种情况,以便选择O(n²)复杂度会更好?
答案 0 :(得分:9)
我认为这里有两个问题;首先是符号所说的,第二个是你真正在真实节目上测量的东西
大O作为限制为n - >;因此,就大O而言,无穷大,O(n)<无论任何有限常数,O(n ^ 2)始终为真。
正如其他人已经指出真正的程序只处理某些有限输入,因此很有可能为n选择足够小的值,使得c * n> 1。 n ^ 2即c> n,但严格来说,你不再处理大O
答案 1 :(得分:2)
如果常数C大于n的值,则O(n²)算法会更好。
答案 2 :(得分:1)
O符号总是存在隐含常数,所以是的,对于足够小的n,O(n ^ 2)可能比O(n)更快。如果O(n)的常数远小于O(n ^ 2)的常数,则会发生这种情况。
答案 3 :(得分:0)
C x O(n)&lt; O(n²)并不总是正确的,n中有一个点可以反转条件。
当C大且n小时,则C x O(n)> O(N²)。 然而,C总是恒定的,因此当n缩放到大数时,C x O(n)< O(N²)。
因此,当n很大时,O(n)总是优于O(n²)。