📜  先进的掌握定理,用于分而治之

📅  最后修改于: 2021-05-08 16:59:57             🧑  作者: 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 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 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-CS-2017(Set 2)|第56章
  • GATE IT 2008 |第42章
  • GATE CS 2009 |第35章