我的算法在大O中具有以下复杂性:
log(N) + log(N+1) + log(N+2) + ... + log(N+M)
它是否与log(N+M)
相同,因为它是最大的元素?
OR是M*log(N+M)
,因为它是M
元素的总和?
答案 0 :(得分:2)
要解决这个问题需要了解的重要规则是:
添加和减去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 <= M
和N>=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))