一、主定理(Master theorem)
主定理是算法分析中的一个重要结论,它主要用于求解基于分治思想设计的递归算法的渐进复杂度。该结论最初由Jon Bentley, Dorothea Haken, 和James B. Saxe三位计算机科学家在1980年给出,其中Jon Bentley是计算机领域畅销书《编程珠玑》的作者,同时他还提出了K-D-Tree这个用于多维数据管理的数据结构。经典教材《算法导论》将该结论命名为主定理,并使其声名远播。
先来看简化版本的主定理:
考虑形如的递归式,
- 如果,那么;
- 如果,那么;
- 如果,那么。
注意在这个简化的版本中,加法右侧的部分必须是polynomial的。
如何应用主定理呢?来看几道例题。
例1:
套用上面的公式,其中a=1,b=3/2,并且d=0,即。因此,可得。
下面给出真正版本的主定理:
考虑形如的递归式,
- 如果存在,使得,那么;
- 如果,那么;
- 如果存在,使得,并且成立,其中是一个常数,是一个足够大的数,那么。
同样来看一道例题。
例2:
类似地,其中a=3,b=4,并且。比较和,易见只要,就有。属于第三种情况,因此。
二、Akra–Bazzi定理
尽管主定理十分强大,而且应用起来也很方便,但并非所有的递归关系都可以用它来求得最终的渐进表示的复杂度。一个更加泛化的结论是由两位黎巴嫩数学家Mohamad Akra 和 Louay Bazzi(二人也都是MIT的校友)在1998年给出的后来以他们名字命名的定理——Akra-Bazzi定理。该定理的形式化表述如下:
考虑形如的递归式,
如果:
- 对于所有的,和是常数,其中,;
- ,其中是一个常数;
- 对于所有的,;
- 是一个常数;
则有
其中,满足 。
如何应用Akra-Bazzi定理呢?来看几道例题。
例3:
首先来找到满足条件的,显然当使得成立的值为2。那么套用上述公式可得:
例4:,其中n是一个很大的数
显然,满足条件的p值等于0,于是有
例5:,其中n是一个很大的数
可以算得,满足条件的p值等于2,于是有
注意,p值未必一定需要是一个整数,例如也是完全可以的。
【本文完】