算法的运行时间由以下递归关系表示;
如何找到该算法的时间复杂度?
我得到了一个大单词then(n)的答案。但是我不知道如何找到它。所以我想知道找到它的过程。
答案 0 :(得分:4)
尝试多次展开递归以查看出现哪种模式可能会有所帮助:
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 + ...)。
该和是几何级数的和。如果您足够破解这个,那就太好了!如果不是这样,请拉起您友善的社区Wikipedia,然后查看其中的公式。
在这种情况下,上述策略效果很好,但是对于更常见的重复,使用主定理通常会有所帮助,该定理可以立即解决许多此类重复问题。有关该定理及其使用方法的详细信息,请查阅Wikipedia。
答案 1 :(得分:2)
T(n)= T(n / 3)+ cn
或T(n / 3 ^ 2)+ cn / 3 + cn
或T(n / 3 ^ 3)+ cn / 3 ^ 2 + cn / 3 + cn
以此类推
最后,T(n)= T(n / 3 ^ k)+ cn / 3 ^(k-1)+ cn / 3 ^(k-2)..... cn / 3 + cn .. 。(1)
现在的基本情况
n / 3 ^ k <= 3或k> = log(base 3)(n / 3),为简单起见,仅考虑相等性
因此等式1将变为
T(n)= n + cn / 3 ^(k-1)+ cn / 3 ^(k-2)..... cn / 3 + cn
或者n + cn(1 + 1/3 + 1/3 ^ 2 .... + 1/3 ^(k-1)这就是GP
或n + cn(1.(1-1/3 ^(k-2))/(1-1 / 3))
或n + cn((3 ^(k-1)-3)/ 2。3 ^(k-2))
将k的值放入上述方程式
n + cn((3 ^(log(base 3)(n / 3 ^ 2))/(2. 3 ^(log(base 3)(n / 3 ^ 3))
最终得到n +(3/2)cn
或T(n)= n(1+(3/2)c)这是Theta(n)
答案 2 :(得分:1)
T(n) = cn + T(n/3)
= cn + cn/3 + T(n/9)
= cn + cn/3 + cn/9 + T(n/27)
Taking the sum of infinite GP series. The value of T(n) will
be less than this sum.
T(n) <= cn(1/(1-1/3))
<= 3cn/2
or we can say
cn <= T(n) <= 3cn/2
Therefore T(n) = \theta(n)
否则,您也可以使用主定理。