我的过程与@hk6279 的过程非常相似,但我相信更容易理解,因为我从代码本身开始。我开始在代码中定义递归关系,然后替换它。
我还从@hk6279 的方法中删除了所有 + k + c 变量,因为它给方程增加了噪音,最后所有这些变量都将被排除。
递归关系
T(n) => 1 -> n = 1
T(i) * T(n-i) -> n > 1; for i in 1..n-1
当 n > 1 时可视化
T(n) = [T(1) + T(2) + T(3) + .... + T(n-2) + T(n-1)] + [T(n-1) + T(n-2) + .... + T(3) + T(2) + T(1)]
T(n) = [T(1) + T(2) + T(3) + .... + T(n-2) + T(n-1)] + [T(1) + T(2) + T(3) + .... + T(n-2) + T(n-1)]
T(n) = 2 * [T(1) + T(2) + T(3) + .... + T(n-2) + T(n-1)]
什么是 T(n-1)?
T(n-1) = 2 * [T(1) + T(2) + T(3) + .... + T(n-2)]
替换为 T(n-1)
T(n) = 2 * [T(1) + T(2) + T(3) + .... + T(n-2) + T(n-1)]
T(n) = 2 * [T(1) + T(2) + T(3) + .... + T(n-2)] + 2 * [T(n-1)]
T(n) = T(n-1) + 2 * [T(n-1)]
T(n) = 3 * T(n-1)
什么是 T(n-2)?
T(n-2) = 2 * [T(1) + T(2) + T(3) + .... + T(n-3)]
替换为 T(n-2)
T(n) = 3 * [2 * [T(1) + T(2) + T(3) + .... + T(n-3) + T(n-2)]]
T(n) = 3 * [2 * [T(1) + T(2) + T(3) + .... + T(n-3)] + 2 * T(n-2)]]
T(n) = 3 * [T(n-2) + 2*T(n-2)]
T(n) = 3 * [3 * T(n-2)]
T(n) = 3^2 * T(n-2)
替换为 T(n-k)
T(n) = 3^k * T(n-k)
if n - k = 1 => k = n + 1
T(n) = 3^(n+1) * T(n-n+1)
T(n) = 3^(n+1) * T(1)
T(n) = 3^(n+1) * 1
时间复杂度
O(3^n)