在本文中,我们将看到如何使用不同的方法解决不同类型的递推关系。在理解本文之前,您应该对递推关系和解决它们的不同方法有所了解(参见:最坏、平均和最佳案例、渐近符号、循环分析)。
类型一:分而治之的递推关系——
下面是一些基于分而治之的递推关系的例子。
T(n) = 2T(n/2) + cn
T(n) = 2T(n/2) + √n
使用 Master Method可以轻松解决这些类型的递推关系。
对于递推关系 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)
让我们根据所讨论的方法讨论一些问题。
Que – 1.河内塔问题的时间复杂度是多少?
(A) T(n) = O(sqrt(n))
(D) T(n) = O(n^2)
(C) T(n) = O(2^n)
(D) 无
解:对于河内塔,T(n) = 2T(n-1) + c,n>1 且 T(1) = 1。解决这个问题,
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) = (logn)
(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)