递归树推导
设总层数为t 所以
t
b
n
=
1
\frac{t}{b^n}=1
bnt=1 (n规模大的问题,每次分为原问题的1/b ,t次分成1)
t
=
l
o
g
b
n
t=log_{b}n
t=logbn
总代价
假定a是b(b>1)的幂
主定理的三种情况分别对应这个式子的的三种情况
1.树的总代价由叶结点的代价决定,
2.树的总代价均匀分布在树的所有层次上
3.树的总代价由根结点的代价决定
case1:
若对某个常数ε>0有
f
(
n
)
=
O
(
n
l
o
g
b
a
−
ε
)
f(n)=O(n^{log_{b}a-ε})
f(n)=O(nlogba−ε)则
g
(
n
)
=
O
(
n
l
o
g
b
a
)
g(n)=O(n^{log_{b}a})
g(n)=O(nlogba)可转换为
存在
f
(
n
)
=
O
(
n
c
)
f(n)=O(n^{c})
f(n)=O(nc) ,其中
c
<
l
o
g
b
a
c<log_{b}a
c<logba
T
(
n
)
=
∑
i
=
0
t
a
i
O
(
(
n
b
i
)
c
)
T(n)=\sum_{i=0}^ta^{i}O((\frac{n}{b^i})^c)
T(n)=i=0∑taiO((bin)c)
=
O
(
∑
i
=
0
t
a
i
(
n
b
i
)
c
)
=O(\sum_{i=0}^ta^{i}(\frac{n}{b^i})^c)
=O(i=0∑tai(bin)c)
=
O
(
n
c
∑
i
=
0
t
(
a
b
c
)
i
)
=O(n^c\sum_{i=0}^t(\frac{a}{b^c})^i)
=O(nci=0∑t(bca)i)
求
和
项
为
等
比
数
列
求和项为等比数列
求和项为等比数列
=
O
(
n
c
(
a
b
c
)
t
)
=O(n^c(\frac{a}{b^c})^t)
=O(nc(bca)t)
n
c
b
t
c
=
1
\frac{n^c}{b^{tc}}=1
btcnc=1
=
O
(
a
t
)
=O(a^t)
=O(at)
a
t
=
a
l
o
g
b
n
=
a
l
o
g
a
n
l
o
g
a
b
=
a
l
o
g
a
n
∗
l
o
g
b
a
a^t=a^{log_{b}n}=a^\frac{{log_{a}n}}{{log_{a}b}}=a^{log_{a}n*log_{b}a}
at=alogbn=alogablogan=alogan∗logba
=
O
(
n
l
o
g
b
a
)
=O(n^{log_{b}a})
=O(nlogba)
得证
case2:
若
f
(
n
)
=
Θ
(
n
l
o
g
b
a
)
f(n)=Θ(n^{log_{b}a})
f(n)=Θ(nlogba)则
g
(
n
)
=
Θ
(
n
l
o
g
b
a
)
g(n)=Θ(n^{log_{b}a})
g(n)=Θ(nlogba)
假设
f
(
n
)
=
Θ
(
n
l
o
g
b
a
)
f(n)=Θ(n^{log_{b}a})
f(n)=Θ(nlogba) 所以
f
(
n
b
i
)
=
Θ
(
(
n
b
i
)
l
o
g
b
a
)
f(\frac{n}{b^i})=Θ((\frac{n}{b^i})^{log_{b}a})
f(bin)=Θ((bin)logba)
T
(
n
)
=
Θ
(
∑
i
=
0
t
a
i
(
n
b
i
)
l
o
g
b
a
)
T(n)=Θ(\sum_{i=0}^ta^{i}(\frac{n}{b^i})^{log_{b}a})
T(n)=Θ(i=0∑tai(bin)logba)
=
Θ
(
n
l
o
g
b
a
∑
i
=
0
t
(
a
a
)
i
)
=Θ(n^{log_{b}a}\sum_{i=0}^t(\frac{a}{a})^i)
=Θ(nlogbai=0∑t(aa)i)
=
Θ
(
n
l
o
g
b
a
∑
i
=
0
t
1
)
=Θ(n^{log_{b}a}\sum_{i=0}^t1)
=Θ(nlogbai=0∑t1)
=
Θ
(
n
l
o
g
b
a
l
o
g
b
n
)
=Θ(n^{log_{b}a}log_{b}n)
=Θ(nlogbalogbn)
=
Θ
(
n
l
o
g
b
a
l
g
n
)
=Θ(n^{log_{b}a}lgn)
=Θ(nlogbalgn)
case3:
若对某个常数c<1和所有足够大的n有
a
f
(
n
b
)
≤
c
f
(
n
)
af(\frac{n}{b})\leq cf(n)
af(bn)≤cf(n)则
T
(
n
)
=
Θ
(
f
(
n
)
)
T(n)=Θ(f(n))
T(n)=Θ(f(n))
T
(
n
)
=
∑
i
=
0
t
a
i
f
(
n
b
i
)
≤
∑
i
=
0
t
c
i
f
(
n
)
≤
f
(
n
)
∑
i
=
0
∞
c
i
T(n)=\sum_{i=0}^ta^{i}f(\frac{n}{b^i})\leq\sum_{i=0}^tc^{i}f(n)\leq f(n)\sum_{i=0}^∞c^{i}
T(n)=i=0∑taif(bin)≤i=0∑tcif(n)≤f(n)i=0∑∞ci
注
意
:
c
<
1
且
求
和
部
分
为
等
比
数
列
,
求
和
再
取
极
限
注意:c<1且求和部分为等比数列,求和再取极限
注意:c<1且求和部分为等比数列,求和再取极限
=
f
(
n
)
(
1
1
−
c
)
+
O
(
1
)
=
O
(
f
(
n
)
)
=f(n)(\frac{1}{1-c})+O(1)=O(f(n))
=f(n)(1−c1)+O(1)=O(f(n))
在上篇的矩阵乘法中,
分治法得到的复杂度
T
(
n
)
=
8
T
(
n
2
)
+
O
(
n
²
)
T(n)=8T(\frac{n}{2})+O(n^²)
T(n)=8T(2n)+O(n²)
则a=8,b=2 满足第一种情况 复杂度为
O
(
n
l
o
g
2
8
)
=
O
(
n
3
)
O(n^{log_{2}8})=O(n^3)
O(nlog28)=O(n3)
Strassen方法中 复杂度
T
(
n
)
=
7
T
(
n
2
)
+
O
(
n
²
)
T(n)=7T(\frac{n}{2})+O(n^²)
T(n)=7T(2n)+O(n²)
a=7, b = 2 也满足第一种情况,复杂度为
O
(
n
l
o
g
2
7
)
O(n^{log_{2}7})
O(nlog27)