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