渐近符号的除法运算

时间:2011-09-06 16:46:35

标签: complexity-theory

假设

S(n) = Big-Oh(f(n)) & T(n) = Big-Oh(f(n)) 

两个f(n)同一属于同一个类。

我的问题是:为什么S(n)/T(n) = Big-Oh(1)不正确?

4 个答案:

答案 0 :(得分:7)

考虑S(n) = n^2T(n) = n。然后,ST都是O(n^2),但S(n) / T(n) = n不是O(1)

这是另一个例子。考虑S(n) = sin(n)T(n) = cos(n)。然后STO(1)S(n) / T(n) = tan(n)不是O(1)。第二个例子很重要,因为它表明即使你有一个紧张的界限,结论仍然可能失败。

为什么会这样?因为明显的“证据”完全失败了。明显的“证据”如下。常量C_SC_T以及N_SN_T其中n >= N_S暗示|S(n)| <= C_S * f(n)n >= N_T暗示|T(n)| <= C_T * f(n) 。让N = max(N_S, N_T)。那么对于n >= N我们有

|S(n) / T(n)| <= (C_S * f(n)) / (C_T * f(n)) = C_S / C_T.

这完全是错误的。 |T(n)| <= C_T * f(n)并不意味着1 / |T(n)| <= 1 / (C_T * f(n))。事实上,1 / |T(n)| >= 1 / (C_T * f(n))是真实的。不平等逆转,这表明“定理”存在严重问题。直观的想法是,如果T是“小”(即有界),则1 / T是“大”。但我们试图证明1 / T是“小”而我们就是不能这样做。正如我们的反例所示,“证据”存在致命缺陷。

然而,这里有一个定理是正确的。也就是说,如果S(n)O(f(n))T(n)Ω(f(n)),则S(n) / T(n)O(1)。上面的“证明”适用于这个定理(感谢Simone将这个想法推广到这个陈述)。

答案 1 :(得分:2)

这是一个反例:

我们说f(n) = n^2S(n) = n^2T(n) = n。现在S和T都在O(f(n))中(您必须记住O(n^2)O(n)的超集,因此O(n)中的所有内容也在O(n^2)中),但U(n) = S(n)/T(n) = n^2/n = n绝对不在O(1)

答案 2 :(得分:1)

与其他解释的一样,S(n)/ T(n)通常不是O(1)。

你的怀疑可能源于O和Θ之间的混淆;实际上如果:

S(n) = Θ(n)      and      T(n) = Θ(n)

然后是以下情况:

S(n) / T(n) = Θ(1)  and thus S(n) / T(n) = O(1)

答案 3 :(得分:0)

如果将一些实际功能插入公式中,您可以证明这是错误的,例如

S(n) = n^2
T(n) = n
f(n) = n^2

S(n) / T(n) = n
n != O(1)