algorithm - 如何找到以下递归关系的时间复杂度?

标签 algorithm time-complexity recurrence

算法的运行时间由以下递推关系表示;

T(n) = n 如果 n<=3

否则T(n) = T[n/3] + cn

如何找到该算法的时间复杂度?

我得到了 big-theta(n) 的单字答案。但我无法弄清楚它是如何被发现的。所以我想知道找到相同的过程。

最佳答案

尝试多次展开循环以查看出现的模式可能会有所帮助:

T[n]

= T[n/3] + cn

= T[n/9] + cn / 3 + cn

= T[n/27] + cn / 9 + cn / 3 + cn

= T[n/81] + cn / 27 + cn / 9 + cn / 3 + cn

更一般地说,这种重复似乎对

cn + cn / 3 + cn / 9 + cn / 27 + cn / 81 + ...

= cn(1 + 1/3 + 1/9 + 1/27 + 1/81 + ...).

那个总和是一个几何级数的总和。如果这足以让你破解这个,太好了!如果没有,请打开您友好的社区维基百科并查看那里的公式。

上述策略在这种情况下效果很好,但对于更一般的递归,使用主定理通常会有所帮助,它可以立即解决许多像这样的递归。查看维基百科以了解有关该定理及其使用方法的详细信息。

关于algorithm - 如何找到以下递归关系的时间复杂度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53918989/

相关文章:

algorithm - 如何求解递归 T(n) = T(n-c) +T(c) + n^2

python - Python 中的递归关系

c - 合并排序,奇怪的行为

r - 查找一个向量中小于另一向量中元素的数量

python - Python 'for' 循环的更好方法

algorithm - 有没有运行在(2 ↑ ↑ n)的算法?

algorithm - 算法中的递归是否需要编写递归关系?

algorithm - Boyer-Moore 算法中的移位规则

java-用节点理解LinkedList面试题

algorithm - 高阶矩阵乘法