首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >O(log(A)) + O(log(B)) = O(log(A * B))?

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

Stack Overflow用户
提问于 2014-10-29 22:40:03
回答 3查看 202关注 0票数 3

这是真的:

代码语言:javascript
复制
log(A) + log(B) = log(A * B)    [0]

这也是真的吗?

代码语言:javascript
复制
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符号相关。那么也许这个等式是对的呢?

代码语言:javascript
复制
O(log(A)) + O(log(B)) = max( O(log(A), O(log(B)) ) [3]
EN

回答 3

Stack Overflow用户

发布于 2014-10-29 22:47:56

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)

票数 2
EN

Stack Overflow用户

发布于 2014-10-29 22:47:34

这总是正确的:O(X + Y) = O(X) + O(Y)

此外,复杂性也没有代数那么宝贵。这意味着,如果某些东西在代数上是相等的,那么它在复杂度上一定是相等的。(当然,如果某些东西在复杂度上是相等的,那么它在代数上就不必相等)

票数 1
EN

Stack Overflow用户

发布于 2014-10-29 22:54:59

1是真的。这就是证明,让c_1和c_2是你通过定义一个函数的大O得到的常数。因此,您需要:

代码语言:javascript
复制
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是正确的,所以你有:

代码语言:javascript
复制
   O(log(A)) + O(log(B)) 
    = c_1*log(A) + c_2*log(B) [5]

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

代码语言:javascript
复制
    <= c_1*log(A) + c_2*log(A)
    = (c_1+c2)*log(A)
    = O(log(A)) 
    = O(max(log(A), log(B)))

它可以简化为:

代码语言:javascript
复制
    = max(O(log(A)), O(log(B)) )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26633240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档