该递归关系表示哪种算法?

时间:2018-09-28 05:57:07

标签: algorithm time-complexity complexity-theory

看看这种递归关系的算法复杂度:

?

此递归关系表示哪种算法。注意,这里有一个T(n) = 2 T(n-1) - 1 而不是minus,所以它不能成为分而治之的算法。

哪种类型的算法因其递归关系而具有复杂性?

2 个答案:

答案 0 :(得分:1)

基于给定的时间复杂度,它是一种指数算法。

要使尺寸减小1,您需要将时间乘以2(大约)

因此它不属于任何多项式时间算法范式,例如分而治之,动态编程,...

答案 1 :(得分:1)

T(n) =  2 T(n-1)-1
T(n) =  4 T(n-2)-3
T(n) =  8 T(n-3)-7
T(n) = 16 T(n-4)-15
...
T(n) = 2^k T(n-k) - 2^(k-1)

例如,如果T(1) = O(1),则

T(n) = 2^(n-1) O(1) - 2^(n-2) = O(2^(n-1)) = O(2^n)

这是指数增长。


现在让我们看一下O(1) - 1 = O(1)。来自CLRS:

  

O(g(n)) = {f(n):存在正常数cn0,使得0 <= f(n) <= c g(n)对所有n >= n0}

因此,要消除-1的影响,我们只需要将隐藏常量c增加一个即可。

因此,只要您的基本案例具有O(1)O(n)n > 0这样的复杂性,您就不必在意-1。换句话说,如果您使T(n) = 2 T(n-1)中的n重复出现至少成指数规律,那么您就不必关心此-1


示例:假设您被告知是否包含S个字符的字符串n包含指定的字符。然后像这样继续,您在S[0..n-2]S[1..n-1]上递归运行算法。当字符串为一个字符长度时,您可以停止递归,然后只需检查字符即可。