从这个递推公式中扣除时间复杂度?

时间:2016-04-03 00:04:48

标签: algorithm time-complexity

我正在阅读关于SO的时间复杂度计算相关问题,但我无法在那里发表评论(没有足够的代表)。 What's the time complexity of this algorithm for Palindrome Partitioning?

我有一个关于从第1到第2个等式的问题:

  

现在你可以为H(n-1)编写相同的表达式,然后替换回来   简化:

     

H(n)= 2 H(n-1)+ O(n)=========>等式1

     

这解决了

     

H(n)= O(n * 2 ^ n)=========>等式2

有人可以说明他是如何从Eq.1获得Eq.2的吗?谢谢。

3 个答案:

答案 0 :(得分:2)

等式1.是recurrence relation。请参阅链接以获取有关如何解决这些类型方程的教程,但我们可以通过扩展解决如下:

H(n) = 2H(n-1) + O(n)
H(n) = 2*2H(n-2) + 2O(n-1) + O(n)
H(n) = 2*2*2H(n-3) + 2*2O(n-2) + 2O(n-1) + O(n)
...
H(n) = 2^n*H(1) + 2^(n-1)*O(1) + ... + 2O(n-1) + O(n)

since H(1) = O(n) (see the original question)
H(n) = 2^n*O(n) + 2^(n-1)*O(1) + ... + 2O(n-1) + O(n)
H(n) = O(n * 2^n)

答案 1 :(得分:1)

我们需要对方程进行均匀化,在这种简单的情况下,只需在每一侧加一个常数即可。首先,指定O(n)= K以避免在此阶段使用O符号进行处理:

H(n)= 2 H(n-1)+ K

然后在每一边添加一个K:

H(n)+ K = 2(H(n-1)+ K)

设G(n)= H(n)+ K,然后

G(n)= 2G(n-1)

这是一个众所周知的齐次1阶重复,用解决方案

G(n)= G(0)×2 n = G(1)×2 n-1

由于H(1)= O(n),G(1)= H(1)+ K = O(n)+ O(n)= O(n),

G(n)= O(n)×2 n-1 = O(n×2 n-1 )= O(n×2 ñ

H(n)= G(n) - K = O(n×2 n ) - O(n)= O(n×2 n )< / p>

答案 2 :(得分:1)

他们错了。

我们假设O指的是紧束缚,用O(n)代替c * n代替常量c。展开你会得到的递归:

enter image description here

完成展开递归n = ib = T(0)

现在找到总和:

enter image description here

总结一下,你会得到:

enter image description here

现在很明显T(n) O(2^n)没有任何n

对于仍然对数学持怀疑态度的人: