O(log(A))+ O(log(B))= O(log(A * B))?

时间:2014-10-29 14:40:03

标签: big-o complexity-theory

这是真的:

log(A) + log(B) = log(A * B)    [0]

这也是真的吗?

O(log(A)) + O(log(B)) = O(log(A * B)) [1]

据我理解

O(f(n)) + O(g(n)) = max( O(f(n)), O(g(n)) ) [2]

或换句话说 - 如果一个函数渐渐地比另一个函数渐近地增长,则只有该函数与大O符号相关。那么这个等式可能是真的吗?

O(log(A)) + O(log(B)) = max( O(log(A), O(log(B)) ) [3]

3 个答案:

答案 0 :(得分:2)

O是线性的。

因此O(a) + O(b) = O(a + b)

所以O(log(A)) + O(log(B)) = O(log(A) + log(B)) = O(log(A * B))


关于[3],你是对的。

if m = O(n) then O(n + m) = O(2n) = 2 O(n) = O(n) (2 is a constant)

答案 1 :(得分:1)

始终如此:O(X + Y) = O(X) + O(Y)

复杂性也不如代数那么珍贵。这意味着,如果代数中的某些东西是相等的,那么复杂性必须相等。 (当然,如果某些事情在复杂性上是相同的,那么在代数中就不一定相同)

答案 2 :(得分:0)

1是真的。这是证明,让c_1和c_2成为函数Big-O定义所得到的常数。所以你有:

O(log(A)) + O(log(B))  
= c_1*log(A) + c_2*log(B)
<= c*log(A) + c*log(B)  where c=max{c_1,c_2}
= c*(log(A)+log(B))
= O(log(A*B))

使用相同的逻辑,你可以看到[3]是正确的,所以你有:

   O(log(A)) + O(log(B)) 
    = c_1*log(A) + c_2*log(B) [5]

假设log(A)是log(A)和log(B)的最大值,你可以得到前面的等式[5]:

    <= c_1*log(A) + c_2*log(A)
    = (c_1+c2)*log(A)
    = O(log(A)) 
    = O(max(log(A), log(B)))

可以简化为:

    = max(O(log(A)), O(log(B)) )