我一直在努力理解大O符号的概念,根据定义,大O表示如下:T(n) ∈ O(G(n)) if T(n) <= G(n) * C
。
由于常数"C"可以是任何大于0的整数,那么下面的例子也是正确的吗?
例子:
n log n ∈ O(log n)
n log n <= log n * c
其中C等于n的值。
我知道答案是n log n ∉ O(log n)
,但我不明白为什么,因为C可以是任何常数。
非常感谢您的帮助:D
我一直在努力理解大O符号的概念,根据定义,大O表示如下:T(n) ∈ O(G(n)) if T(n) <= G(n) * C
。
由于常数"C"可以是任何大于0的整数,那么下面的例子也是正确的吗?
例子:
n log n ∈ O(log n)
n log n <= log n * c
其中C等于n的值。
我知道答案是n log n ∉ O(log n)
,但我不明白为什么,因为C可以是任何常数。
非常感谢您的帮助:D
c就是一个常数。这意味着你不能说“让c成为n的值”,因为你必须先选择一些c,然后才能允许比较在所有n中都成立。
换句话说,为了使某个T(n)成为O(G(n)), 必须不存在任何常数c使得对于所有n,G(n)*c大于T(n)。
因此,n log n不是O(log n),因为无论你选择什么常数,n > c将导致n log n大于c log n。
让我重复一下你的话。
c可以是任何一个常数。
这意味着c不能依赖于n。
这个想法是对于任何n和一个固定的c,不等式都成立。所以虽然你可能会发现某个c,使得n log n < c log n(即任何c> n),但你也可以很容易地找到其他n’,它并不成立(即n'>c)。
n的值取决于输入集合,而C的值是固定的。
因此,如果n = 16且C = 256,则对于小型输入集合,它看起来像是n^2 * lg(n)。现在将输入集合增加到100,000,000;C的值保持为256,你现在有256 * lg(100,000,000)。