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

时间:2014-10-29 14:32:54

标签: big-o complexity-theory

如标题所示,这个等式是真的吗?

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

两个函数或多或少相似(两个函数都没有比另一个快得多)所以我想我们可以写得像:

O(log(A+B)) ≈ O(log(A*B))

但是,为了使它完全相等,这两个函数不需要具有完全相同的渐近增长吗?

2 个答案:

答案 0 :(得分:1)

是的,你确实是对的。这是因为我们有以下不等式(足够大的A和B):

log(A+B) ≤ log(A*B)

log(A*B) = log(A) + log(B) ≤ log(A + B) + log(A + B) = 2 * log(A + B)


注:

在这里使用big-O表示法并不正确,你正在处理log(A+B)log(A*B)之间的紧密界限,所以你应该使用big-Theta表示法:

log(A + B) = Θ(log(A * B))

答案 1 :(得分:0)

只做一个比例

r = log(A + B) / log(A * B) = log(A + B) / (log(A) + log(B))

如果A和B都接近无穷大,则此表达式具有有限的正限制:

1)如果A / B <1。 1然后

log(A)/(2 * log(A)) <  r < (log(A) + log(2)) / log(A)
1/2 < r < 1 + log(2)/log(A)

2)用B代替A代替B / A&lt; 1

3)A == B是微不足道的

所以复杂性是一样的。