日志函数总和的复杂性是什么

时间:2017-09-25 15:16:30

标签: algorithm time-complexity

我的算法在大O中具有以下复杂性:

log(N) + log(N+1) + log(N+2) + ... + log(N+M)

它是否与log(N+M)相同,因为它是最大的元素?

OR是M*log(N+M),因为它是M元素的总和?

2 个答案:

答案 0 :(得分:2)

要解决这个问题需要了解的重要规则是:

  • 记录a + Log b = Log ab和
  • 记录a - 记录b =记录a / b

添加和减去Log 2,Log 3,...将N-1记录到给定值。

这将为您提供Log 2 + Log 3 + ... + Log(N + M) - (Log 2 + Log 3 + ... + Log(N-1))

第一部分将计算到 Log((N + M)!),减法符号后面的部分将计算到 Log((N-1)!)

因此,这种复杂性来自 Log((N + M)!/(N-1)!)

OP在评论中提出另一个好问题后,

更新

  

如果我们有N + N ^ 2 + N ^ 3,它将减少到只有N ^ 3(最大的元素),对吗?为什么我们不能在这里应用相同的逻辑 - log(N + M) - 最大元素?

如果我们只有两个看起来像Log(N)+ Log(M + N)的术语,那么我们可以将它们组合起来并说它们肯定会小于2 * Log(M + N),因此是O(Log(M + N))。

但是,如果要汇总的项目数与项目的最高值之​​间存在关系,那么这种关系的存在会使计算略微不那么直接。

例如,添加2(Log N)的大O是O(Log N),而N Log N的总和的大O不是O(Log N) )但是是O(N * Log N)。

在给定的求和中,总值的值和数量取决于M和N,因此我们不能将这种复杂性作为Log(M + N),但是,我们绝对可以将其写为M *(Log( M + N))。

如何?给定总和中的每个值小于或等于Log(M + N),并且总共有M个这样的值。因此,这些值的总和将小于M *(Log(M + N)),因此将为O(M *(Log(M + N)))。

因此,两个答案都是正确的,但O( Log((N + M)!/(N-1)!))是一个更严格的界限。

答案 1 :(得分:0)

如果M不依赖于N且不变,则复杂度为O(log(N))

对于k,例如0 <= k <= MN>=M以及N>=2

log(N+k)=log(N(1+k/N)) = log(N) + log(1+k/N) <= log(N) + log(2) 
<= log(N) + log(N) <= 2 log(N)

所以

log(N) + log(N+1) + log(N+2) + ... + log(N+M) <= (M+1)2 log(N)

因此,大O的复杂性是:log(N)

回答你的问题:

1)是,因为有固定数量的元素都小于或等于log(N + M)

2)实际上有M + 1个元素(从0到M)

我指定O((M + 1)log(N + M))是O(log(N))