在本文中,我们将看到如何使用不同的方法解决不同类型的递归关系。在理解本文之前,您应该对递归关系和解决它们的不同方法有所了解(请参阅:最坏,平均和最佳情况,渐近符号,循环分析)。
类型1:分而治之递归关系–
以下是基于分而治之的递归关系的一些示例。
T(n) = 2T(n/2) + cn
T(n) = 2T(n/2) + √n
使用Master方法可以轻松解决这些类型的递归关系。
对于递归关系T(n)= 2T(n / 2)+ cn,a = 2,b = 2和k = 1的值。此处logb(a)= log2(2)= 1 = k。因此,复杂度将为Θ(nlog2(n))。
类似地,对于递归关系T(n)= 2T(n / 2)+√n,a = 2,b = 2和k = 1/2的值。此处logb(a)= log2(2)= 1> k。因此,复杂度将为Θ(n)。
类型2:线性递归关系–
以下是基于线性递归关系的递归关系的一些示例。
T(n) = T(n-1) + n for n>0 and T(0) = 1
使用替换方法可以轻松解决这些类型的递归关系。
例如,
T(n) = T(n-1) + n
= T(n-2) + (n-1) + n
= T(n-k) + (n-(k-1))….. (n-1) + n
代入k = n,我们得到
T(n) = T(0) + 1 + 2+….. +n = n(n+1)/2 = O(n^2)
类型3:求解前的值替换–
有时,不能使用替代,递归树或主方法等技术直接解决递归关系。因此,我们需要在解决之前将递归关系转换为适当的形式。例如,
T(n) = T(√n) + 1
要解决这种类型的重复,将n = 2 ^ m替换为:
T(2^m) = T(2^m /2) + 1
Let T(2^m) = S(m),
S(m) = S(m/2) + 1
通过掌握方法求解,我们得到
S(m) = Θ(logm)
As n = 2^m or m = log2(n),
T(n) = T(2^m) = S(m) = Θ(logm) = Θ(loglogn)
让我们根据讨论的方法讨论一些问题。
– – 1.河内塔问题的时间复杂度是多少?
(A)T(n)= O(sqrt(n))
(D)T(n)= O(n ^ 2)
(C)T(n)= O(2 ^ n)
(D)无
解决方案:对于河内塔,对于n> 1且T(1)= 1,T(n)= 2T(n-1)+ c。
T(n) = 2T(n-1) + c
= 2(2T(n-2)+ c) + c = 2^2*T(n-2) + (c + 2c)
= 2^k*T(n-k) + (c + 2c + .. kc)
Substituting k = (n-1), we get
T(n) = 2^(n-1)*T(1) + (c + 2c + (n-1)c) = O(2^n)
Que – 2.考虑以下重复发生:
T(n)= 2 * T(ceil(sqrt(n)))+ 1,T(1)= 1
以下哪一项是正确的?
(A)T(n)=(loglogn)
(B)T(n)=(登录)
(C)T(n)=(sqrt(n))
(D)T(n)=(n)
解决方案:要解决此类重复问题,请将n = 2 ^ m替换为:
T(2^m) = 2T(2^m /2) + 1
Let T(2^m) = S(m),
S(m) = 2S(m/2) + 1
Solving by master method, we get
S(m) = Θ(m)
As n = 2^m or m = log2n,
T(n) = T(2^m) = S(m) = Θ(m) = Θ(logn)