如标题所示,这个等式是真的吗?
O(log(A+B)) = O(log(A*B))
两个函数或多或少相似(两个函数都没有比另一个快得多)所以我想我们可以写得像:
O(log(A+B)) ≈ O(log(A*B))
但是,为了使它完全相等,这两个函数不需要具有完全相同的渐近增长吗?
答案 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是微不足道的
所以复杂性是一样的。