主方法给出了求解形如下式的递归式的通用方法:
T(n) = aT(n/b) + f(n)
其中a>=0和b>1是常数
该递归式描述了将规模为n的问题划分为a个子问题的算法运行时间,每个子问题的规模为n/b。a个子问题被分别递归的解决,时间各为T(n/b)。划分原问题和合并答案的代价由函数f(n)描述。
(主定理) 设a>=1和b>1为常数,设f(n)为一函数,T(n)由递归式
T(n) = aT(n/b) + f(n)
对非负整数定义,其中n/b指取上整数或者下整数。那么T(n)可能有如下的渐近界
1) 若对于某常数e>0,有f(n) = O(),则T(n) =
2) 若f(n) = ,则T(n) = ;
3) 若对于某常数e>0,有f(n) = ,且对常数c<1与所有足够大的n,有af(n/b)<=cf(n),则T(n) =
下面来看一个例子:
T(n) = 9T(n/3) + n
在这个递归式中,a = 9,b = 3,f(n) = n, = = 。因为f(n) = O(),其中e = 1,这对应主定理的第一种情况,所以T(n) =
再看一个例子:
T(n) = T(2n/3) + 1
其中a = 1,b = 3/2,f(n) = 1, = = = 1,第二种情况成立,因为f(n) = = ,故递归式的解为T(n) =