📜  分治递归的高级主定理

📅  最后修改于: 2021-09-16 10:51:19             🧑  作者: Mango

主定理用于根据渐近符号确定算法(分治算法)的运行时间。
考虑使用递归解决的问题。

function f(input x size n)
if(n < k)
solve x directly and return 
else
divide x into a subproblems of size n/b
call f recursively to solve each subproblem
Combine the results of all sub-problems


上述算法将问题划分为大小为 n/b子问题,并递归求解它们以计算问题,为问题所做的额外工作由 f(n) 给出,即创建子问题并组合它们的时间导致上述过程。

因此,根据主定理,上述算法的运行时间可以表示为:

T(n) = aT(n/b) + f(n)   

其中 n = 问题的大小
a = 递归中子问题的数量且 a >= 1
n/b = 每个子问题的大小
f(n) = 在递归调用之外完成的工作成本,例如划分子问题和组合它们以获得解决方案的成本。

并非所有递推关系都可以使用主定理来解决,即如果

  • T(n) 不是单调的,例如:T(n) = sin n
  • f(n) 不是多项式,例如:T(n) = 2T(n/2) + 2 n

该定理是主定理的高级版本,如果递归具有以下形式,则可用于确定分治算法的运行时间:-

其中 n = 问题的大小
a = 递归中子问题的数量且 a >= 1
n/b = 每个子问题的大小
b > 1, k >= 0 并且 p 是实数。

然后,

  1. 如果 a > b k ,则 T(n) = θ(n log b a )
  2. 如果 a = b k ,则
    (a) 如果 p > -1,则 T(n) = θ(n log b a log p+1 n)
    (b) 如果 p = -1,则 T(n) = θ(n log b a loglogn)
    (c) 如果 p < -1,则 T(n) = θ(n log b a )
  3. 如果 a < b k ,则
    (a) 如果 p >= 0,则 T(n) = θ(n k log p n)
    (b) 如果 p < 0,则 T(n) = θ(n k )

时间复杂度分析——

  • 示例 1:二分搜索 – T(n) = T(n/2) + O(1)
    a = 1, b = 2, k = 0 和 p = 0
    b k = 1。因此,a = b k且 p > -1 [情况 2.(a)]
    T(n) = θ(n log b a log p+1 n)
    T(n) = θ(logn)
  • 示例 2:归并排序 – T(n) = 2T(n/2) + O(n)
    a = 2, b = 2, k = 1, p = 0
    b k = 2。因此,a = b k且 p > -1 [情况 2.(a)]
    T(n) = θ(n log b a log p+1 n)
    T(n) = θ(nlogn)
  • 示例 3: T(n) = 3T(n/2) + n 2
    a = 3, b = 2, k = 2, p = 0
    b k = 4。因此,a < b k且 p = 0 [案例 3.(a)]
    T(n) = θ(n k log p n)
    T(n) = θ(n 2 )
  • 示例 4: T(n) = 3T(n/2) + log 2 n
    a = 3, b = 2, k = 0, p = 2
    b k = 1。所以,a > b k [案例 1]
    T(n) = θ(n log b a )
    T(n) = θ(n log 2 3 )
  • 示例 5: T(n) = 2T(n/2) + nlog 2 n
    a = 2, b = 2, k = 1, p = 2
    b k = 2。所以,a = b k [案例 2.(a)]
    T(n) = θ(n log b a log p+1 n )
    T(n) = θ(n log 2 2 log 3 n)
    T(n) = θ(nlog 3 n)
  • 示例 6: T(n) = 2 n T(n/2) + n n
    使用上述方法无法解决此递归问题,因为函数不是 T(n) = aT(n/b) + θ(n k log p n) 形式

GATE 练习题——

  • GATE-CS-2017(套装2)|第 56 题
  • 门 IT 2008 |第 42 题
  • GATE CS 2009 |第 35 题