所有算法都可以描述为O(1)吗?

时间:2016-10-27 21:16:27

标签: algorithm big-o asymptotic-complexity

我读到Big O表示法的正式定义是:

如果存在常数c和n0,则T(n)被认为是O(f(n))其中对于所有n,T(n)<= c.f(n)+ n0> N0。

但我想知道,这并不意味着如果算法是O(n),它也必须是O(n ^ 2)和O(n ^ 3)等?

当然,如果存在常数c和n0,其中对于所有n,T(n)&lt; = c.n + n0&gt; N0。还必须有常数c和n0,其中对于所有n,T(n)<= c。(n ^ 2)+ n0。 N0。

事实上,如果你选择c =无穷大,每个算法都可以说有O(1),因为任何T(n)都是&lt; = infinity.1 + n0。

我知道这完全违背了Big O符号的目的。但我想知道我哪里出错了,以及我错过了什么。

1 个答案:

答案 0 :(得分:1)

O(n)是函数的,当我们说“T(n)是O(n)”或甚至“T(n)= O(n)”时,我们只是马虎而且应该更正确地说“T(n) O(n)”。

如您所知,O(n ^ 2)是O(n)的超集,O(n ^ 3)是O(n ^ 2)的超集,因此如果T(n)在O中(n),那么它也在O(n ^ 2)和O(n ^ 3)。

第二部分你错了,但是:无穷大不是一个实数,所以你不能把它当作一个常数并推断出一切都在O(1)中。

相关问题