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值未必必定須要是一個整數,例如也是徹底能夠的。
【本文完】