我读到大O符号的形式定义是:
如果存在常数C和N0,T(n)被认为是O(f(n)),其中所有n>n0的t(n)但我想知道,这不意味着如果一个算法是o(n),它也必须是o(n^2)和o(n^3)等吗?
当然,如果存在一个常数C和0,那么所有的n(n)都是。也必须有一个常数c和n0,其中T(n)<=c(n^2)+n0表示所有n>n0。
事实上,如果选择c=infinity,每个算法都可以说有O(1),因为任何T(n)都是我知道这完全违背了大O记号的目的但我想知道我做错了什么,我错过了什么。

最佳答案

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)中。

10-06 05:06