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有效!