📜  不同类型的递归关系及其解决方案

📅  最后修改于: 2021-04-26 06:57:31             🧑  作者: Mango

在本文中,我们将看到如何使用不同的方法解决不同类型的递归关系。在理解本文之前,您应该对递归关系和解决它们的不同方法有所了解(请参阅:最坏,平均和最佳情况,渐近符号,循环分析)。

类型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)