algorithm - 化简 log n/3i 的总和

标签 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}

我现在的问题是我不知道如何化简这个和!

谁能帮我解释一下怎么做?

最佳答案

代入 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(k) = W(3^k)

T(0) = 1
T(k) = T(k-1) + lg(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.

关于algorithm - 化简 log n/3i 的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26189734/

相关文章:

ruby - 无法总结 ruby 整数

algorithm - 我如何证明某个指数幂的所有常数都属于某个函数的 little-o

c - 我用牛顿法求平方根的逻辑有什么问题?

java - 需要建议解决递归算法以确定字符串是否是其他两个字符串的混洗

c++ - 计算嵌套根式级数

algorithm - 基于动态规划之字形拼图

algorithm - 在 Neo4j 中查找树的最长分支

algorithm - 最大产品切割算法

scala - 通过使用 sumInts 方法理解 scala 替换模型

c++ - Sieve of Eratosthenes 算法的效率