Algorithm 简化对数n/3i之和

Algorithm 简化对数n/3i之和,algorithm,math,recursion,time-complexity,summarization,Algorithm,Math,Recursion,Time Complexity,Summarization,我有以下等式: W(n) = w(n/3) + lg(n) W(1) = Theta(1) 我想找出它的时间复杂性。 它不能用主定理来解决(谁能证实),所以我只能用“手”来解决 如果我把它想象成一棵树,那么只有一棵W(1),因为它只是把自己分成一部分,而不是几个部分 对于所有其他n!=1,我可以像求和一样写: sum_{i=0}^{log3(n)-1}ln\frac{n}{3i} 我现在对这个问题的回答是: w(n) = sum_{i=0}^{log3(n)-1}ln\frac{n}{3i}

我有以下等式:

W(n) = w(n/3) + lg(n)
W(1) = Theta(1)
我想找出它的时间复杂性。 它不能用主定理来解决(谁能证实),所以我只能用“手”来解决

如果我把它想象成一棵树,那么只有一棵
W(1)
,因为它只是把自己分成一部分,而不是几个部分

对于所有其他
n!=1
,我可以像求和一样写:

sum_{i=0}^{log3(n)-1}ln\frac{n}{3i}
我现在对这个问题的回答是:

w(n) = sum_{i=0}^{log3(n)-1}ln\frac{n}{3i}
我现在的问题是,我不知道如何简化这个总数


有人能给我解释一下怎么做吗?替换
n=3^k

W(3^0) = 1
W(3^k) = W(3^(k-1)) + lg(3^k) = W(3^(k-1)) + lg(3)*k,
T(0) = 1
T(k) = T(k-1) + lg(3)*k.
替换
T(k)=W(3^k)

通过归纳法验证

T(k) = 1 + lg(3) * sum_{j=1}^k j = 1 + lg(3) * (k+1)*k/2.
撤消替换

W(n) = 1 + lg(3) * (log3(n)+1)*log3(n)/2 = 1 + (lg(n)/lg(3)+1)*lg(n)/2.

它满足主定理

a=1
b=3
,和
f(n)=lg n
,这适用于
c=0
k=1
。因此,
w(n)=θ(lg^2n)

您可以分析您的最终金额:

w(n) = sum_{i=1}^{log3(n)-1}ln\frac{n}{3i}
= sum_{i=1}^{log3(n)-1}ln(n/3)-ln i
= (log3(n)-1)ln(n/3)-ln((log3(n)-1)!)
= Theta(ln^2(n))-Theta(ln((log3(n)-1)!)
= Theta(ln^2(n))-Theta((log3(n)-1)ln(log3(n)-1))
= Theta(ln^2(n))-Theta(ln n * ln(ln n))
= Theta(ln^2(n))

1.在第3步中,如何计算总和?2.你只是写下等式必须通过归纳法来验证,你没有验证它,对吗?3.我的不简单的解决方案错了吗?@user1991779好吧,替换几次来观察
T(k)=T(k-1)+lg(3)*k=T(k-2)+lg(3)*(k-1)+lg(3)*k=…
,然后进行概括。@user1991779如果你说的
3i
3^i
,那么大约(你已经放弃了
W(1)
现场术语,在最终会计中并不重要)。谢谢!是的,应该是3^i。“算法简介3版”说如果f(n)=θ(n^(logb(a)),而不是θ(n^(logb(a)*log^k(n)),则步骤to有效!