主定理(Master theorem)与Akra–Bazzi定理

一、主定理(Master theorem)

主定理是算法分析中的一个重要结论,它主要用于求解基于分治思想设计的递归算法的渐进复杂度。该结论最初由Jon Bentley, Dorothea Haken, 和James B. Saxe三位计算机科学家在1980年给出,其中Jon Bentley是计算机领域畅销书《编程珠玑》的作者,同时他还提出了K-D-Tree这个用于多维数据管理的数据结构。经典教材《算法导论》将该结论命名为主定理,并使其声名远播。

先来看简化版本的主定理:

考虑形如T(n)=aT(n/b)+\Theta(n^d)的递归式,

  • 如果a>b^d,那么T(n)=\Theta(n^{\log_ba})
  • 如果a=b^d,那么T(n)=\Theta(n^d\log n)
  • 如果a<b^d,那么T(n)=\Theta(n^d)

注意在这个简化的版本中,加法右侧的部分必须是polynomial的。

如何应用主定理呢?来看几道例题。

例1:T(n)=T(2n/3)+1

套用上面的公式,其中a=1,b=3/2,并且d=0,即a=b^d。因此,可得T(n)=\Theta(\log n)

下面给出真正版本的主定理:

考虑形如T(n)=aT(n/b)+f(n)的递归式,

  • 如果存在\epsilon>0,使得f(n)=O(n^{\log_b a -\epsilon}),那么T(n)=\Theta(n^{\log_ba})
  • 如果f(n)=\Theta(n^{\log_b a}),那么T(n)=\Theta(n^{\log_ba}\log n)
  • 如果存在\epsilon>0,使得f(n)=\Omega(n^{\log_ba+\epsilon}),并且af(n/b)\leq cf(n)成立,其中c是一个常数,n是一个足够大的数,那么T(n)=\Theta (f(n))

同样来看一道例题。

例2:T(n)=3T(n/4)+n\log n

类似地,其中a=3,b=4,并且f(n)=n\log n。比较n^{\log_4 3}n\log n,易见只要\log_43+\epsilon\leq 1,就有n\log n=\Omega(n^{\log_43+\epsilon})。属于第三种情况,因此T(n)=\Theta(n\log n)

二、Akra–Bazzi定理

尽管主定理十分强大,而且应用起来也很方便,但并非所有的递归关系都可以用它来求得最终的渐进表示的复杂度。一个更加泛化的结论是由两位黎巴嫩数学家Mohamad Akra 和 Louay Bazzi(二人也都是MIT的校友)在1998年给出的后来以他们名字命名的定理——Akra-Bazzi定理。该定理的形式化表述如下:

考虑形如T(x)=g(x)+\sum ^k_{i=1}a_iT(b_ix+h_i(x)), for\ x\geq x_0的递归式,

如果:

  • 对于所有的ia_ib_i是常数,其中a_i>00<b_i<1
  • |g(x)|\in O(x^c),其中c是一个常数;
  • 对于所有的i|h_i(x)|\in O(\frac{x}{(\log x)^2})
  • x_0是一个常数;

则有

T(x)\in \Theta(x^p(1+\int_{1}^{x}\frac{g(u)}{u^{p+1}}du))

其中,p满足 \sum_{i=1}^{k}a_ib_i^p=1

如何应用Akra-Bazzi定理呢?来看几道例题。

例3:T(n)=\frac{7}{4}T(\frac{1}{2}n)+T(\frac{3}{4}n)+n^2, for\ n\geq3

首先来找到满足条件的p,显然当使得\frac{7}{4}(\frac{1}{2})^p+(\frac{3}{4})^p=1成立的p值为2。那么套用上述公式可得:

T(x)\in \Theta(x^2(1+\int_{1}^{x}\frac{u^2}{u^3}du))=\Theta(x^2\log x)

例4:T(n)=\frac{1}{4}T(\frac{3}{4}n)+\frac{3}{4}T(\frac{1}{4}n)+1,其中n是一个很大的数

显然,满足条件的p值等于0,于是有

T(x)\in \Theta(x^0(1+\int_{1}^{x}\frac{1}{u}du))=\Theta(\log x)

例5:T(n)=T(\frac{2}{7}n)+T(\frac{3}{7}n)+T(\frac{6}{7}n)+n^2,其中n是一个很大的数

可以算得,满足条件的p值等于2,于是有

T(x)\in \Theta(x^2(1+\int_{1}^{x}\frac{u^2}{u^3}du))=\Theta(x^2\log x)

注意,p值未必一定需要是一个整数,例如\log 3也是完全可以的。



【本文完】

猜你喜欢

转载自blog.csdn.net/baimafujinji/article/details/6470772
今日推荐