这是真的:
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]
答案 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)) )