Master定理
Master定理:对于一个规模为n
的问题,通过分治将每个问题分解成a
个规模为 n/b
的子问题,每次递归带来的额外运算为
f
(
n
)
=
θ
(
n
c
)
f(n)=\theta (n^c)
f(n)=θ(nc),那么可得到它的时间复杂度关系式:
T ( n ) = a T ( n b ) + θ ( n c ) T(n)=a T(\frac{n}{b})+\theta (n^c) T(n)=aT(bn)+θ(nc)
令 d = l o g b a d=log_ba d=logba
- 若 d>c,则 T ( n ) = O ( n d ) T(n)=O(n^d) T(n)=O(nd)
- 若 d=c,存在 k > = 0 k>=0 k>=0, 使得 f ( n ) = n d ∗ l o g k n f(n)= n^d * log^k n f(n)=nd∗logkn, 则 T ( n ) = O ( n d ) ∗ l o g k + 1 n T(n)=O(n^d )* log^{k+1} n T(n)=O(nd)∗logk+1n
- 若 d<c, 则 T ( n ) = O ( n c ) T(n)=O(n^c) T(n)=O(nc)
简介
给与两个比较大的数X和Y,且不能直接用基本类型表示,利用分治思想将X、Y分别拆分为A与B、C与D(长度不同可以补0)。
X ∗ Y = ( A ∗ 1 0 n 2 + B ) ( C ∗ 1 0 n 2 + D ) = A ∗ C ∗ 1 0 n + A ∗ D ∗ 1 0 n 2 + B ∗ C ∗ 1 0 n 2 + B ∗ D X*Y = (A*10^\frac{n}{2}+B) (C*10^\frac{n}{2}+D) \\ = A*C*10^n + A*D*10^\frac{n}{2}+B*C*10^\frac{n}{2}+B*D X∗Y=(A∗102n+B)(C∗102n+D)=A∗C∗10n+A∗D∗102n+B∗C∗102n+B∗D
而AC, AD,BC,BD再通过分治法求解,乘以10的幂相当于移位操作。所以需要调用四次分治乘法函数,所以时间复杂度为:
T
(
n
)
=
4
∗
T
(
n
2
)
+
θ
(
n
)
T(n) = 4*T(\frac{n}{2})+\theta (n)
T(n)=4∗T(2n)+θ(n)
通过master定理可得 T ( n ) = O ( n 2 ) T(n)=O (n^2) T(n)=O(n2)。
通过化简上述公式得
X ∗ Y = A ∗ C ∗ 1 0 n + ( A ∗ D + B ∗ C ∗ ) 1 0 n 2 + B ∗ D = A ∗ C ∗ 1 0 n + ( ( A − B ) ∗ ( D − C ) + A ∗ C + B ∗ D ) ∗ 1 0 n 2 + B ∗ D X*Y = A*C*10^n + (A*D+B*C*)10^\frac{n}{2}+B*D\\ = A*C*10^n + ((A-B)*(D-C)+A*C+B*D)*10^\frac{n}{2}+B*D X∗Y=A∗C∗10n+(A∗D+B∗C∗)102n+B∗D=A∗C∗10n+((A−B)∗(D−C)+A∗C+B∗D)∗102n+B∗D
可知只需要对AC,DB, (A-B)*(D-C)再通过分治法求解, 所以只需要调用三次分治乘法函数即可,所以时间复杂度为:
T ( n ) = 3 ∗ T ( n 2 ) + θ ( n ) T(n) = 3*T(\frac{n}{2})+\theta (n) T(n)=3∗T(2n)+θ(n)
通过master定理可得 T ( n ) = O ( n l o g 2 3 ) T(n)=O (n^{{log_23}}) T(n)=O(nlog23)。