主定理用于根据渐近符号确定算法(分而治之的算法)的运行时间。
考虑使用递归解决的问题。
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为实数。
然后,
- 如果a> b k ,则T(n)=θ(n log b a )
- 如果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 ) - 如果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章