【发布时间】:2017-03-10 17:03:55
【问题描述】:
我读到大 O 符号的正式定义是:
如果存在常数 c 和 n0,则认为 T(n) 为 O(f(n)),其中对于所有 n > n0,T(n)
但我想知道,这是否意味着如果一个算法是 O(n),它也必须是 O(n^2) 和 O(n^3) 等?
当然,如果存在一个常数 c 和 n0,其中 T(n) n0。还必须有一个常数 c 和 n0,其中 T(n) n0。
实际上,如果选择 c = infinity,每个算法都可以说是 O(1),因为任何 T(n) 都将是
我知道这完全违背了大 O 符号的目的。但我想知道我哪里出错了,我错过了什么。
【问题讨论】:
-
c=infinity 不是 c 的有效选择。我们正在研究实数,或者可能是整数或自然数。这些系统中没有一个包含无穷大。
-
math.stackexchange.com/questions/36289/is-infinity-a-number 可能有助于理解“无穷大不是数字”。
-
@Synia:是的。您可能还想查看相关的符号,尤其是限制性更强的 Big-Theta。
-
函数的顺序是最小的上界。如果你有一个 O(n) 函数,它也是 O(n^2) 和 O(e^n),但 n 是最小上限。 “存在 c, n0 st T(n) n0”意味着“存在 c, n0 st T(n) n0" 成立,但你不能反过来说。函数阶数的定义还要求 c 是一个常数,而无穷大不是。
-
@MidTwo:没有计划。我喜欢以我的自动生成名称结尾的 2、3、5、7、11 序列。更有辨识度可能会很好,但我对此并没有强烈的渴望。
标签: algorithm big-o asymptotic-complexity