代入法
substitution method
- Guess the from of the solution
- verify by induction
- solve the consts
example
T
(
n
)
=
4
T
(
n
/
2
)
+
n
T(n) = 4T(n/2) + n
T(n)=4T(n/2)+n
[
T
(
1
)
=
Θ
(
1
)
]
[T(1) = \Theta(1)]
[T(1)=Θ(1)]
—Guess:
T
(
n
)
=
O
(
n
3
)
T(n) = O(n^3)
T(n)=O(n3)
—Assume:
T
(
k
)
≤
c
k
3
,
f
o
r
k
<
n
T(k) \leq ck^3, for \:k < n
T(k)≤ck3,fork<n
—
T
(
n
)
=
4
T
(
n
/
2
)
+
n
≤
4
c
(
n
/
2
)
3
+
n
T(n) = 4T(n/2)+n \leq 4c(n/2)^3+n
T(n)=4T(n/2)+n≤4c(n/2)3+n
=
c
2
n
3
+
n
=\frac{c}{2}n^3+n
=2cn3+n
=
c
n
3
−
(
c
2
n
3
−
n
)
=cn^3-(\frac{c}{2}n^3 - n)
=cn3−(2cn3−n)
≤
c
n
3
\leq cn^3
≤cn3, 当且仅当
(
c
2
n
3
−
n
)
≥
0
(\frac{c}{2}n^3 - n) \geq 0
(2cn3−n)≥0. example:
∃
c
≥
1
,
n
≥
2
\exists \: c \geq 1, n \geq 2
∃c≥1,n≥2
Base case, T ( 1 ) = Θ ( 1 ) ≤ c T(1) =\Theta(1) \leq c T(1)=Θ(1)≤c, 只要 c c c足够大即可满足。
由此,可以看到
T
(
n
)
=
O
(
n
3
)
T(n)=O(n^3)
T(n)=O(n3)是成立的。
直观上来看,按照渐进趋势,当
n
n
n趋于无穷大时,
∃
s
o
m
e
c
s
.
t
.
(
c
2
n
3
−
n
)
≥
0
\exists \:some \:c \: s.t.\: (\frac{c}{2}n^3-n)\geq 0
∃somecs.t.(2cn3−n)≥0成立。证毕。
鉴于此,我们可以看到,要使上述归纳成立,则余数
(
c
2
n
3
−
n
)
≥
0
(\frac{c}{2}n^3-n)\geq 0
(2cn3−n)≥0,且为常数比较好。因此,再次猜测如下:
—Guess:
T
(
n
)
=
O
(
n
2
)
T(n) = O(n^2)
T(n)=O(n2)
—Assume:
T
(
k
)
≤
c
k
2
,
f
o
r
k
<
n
T(k) \leq ck^2, for \:k < n
T(k)≤ck2,fork<n
—
T
(
n
)
=
4
T
(
n
/
2
)
+
n
≤
4
c
(
n
/
2
)
2
+
n
T(n) = 4T(n/2)+n \leq 4c(n/2)^2+n
T(n)=4T(n/2)+n≤4c(n/2)2+n
=
c
n
2
+
n
=cn^2+n
=cn2+n
=
c
n
2
−
(
−
n
)
=cn^2-(-n)
=cn2−(−n)
直观上, 我们感觉到
T
(
n
)
=
O
(
n
)
T(n) = O(n)
T(n)=O(n)成立, 但是没有证明归纳法的严格形式
T
(
n
)
≤
c
n
2
T(n) \leq cn^2
T(n)≤cn2。
造成这种情况的原因, 可能是我们在假设时忽略了低阶项的缘故, 因此
—Assume: T ( k ) ≤ c 1 k 2 − c 2 k , f o r k < n T(k) \leq c_1k^2 - c_2k, for \:k < n T(k)≤c1k2−c2k,fork<n
—
T
(
n
)
=
4
T
(
n
/
2
)
+
n
≤
4
(
c
1
(
n
/
2
)
2
−
c
2
(
n
/
2
)
)
+
n
T(n) = 4T(n/2)+n \leq 4 \big(c_1(n/2)^2 - c_2(n/2) \big) +n
T(n)=4T(n/2)+n≤4(c1(n/2)2−c2(n/2))+n
=
c
1
n
2
−
2
c
2
n
+
n
=c_1n^2 - 2c_2n + n
=c1n2−2c2n+n
=
c
1
n
2
−
c
2
n
−
(
c
2
−
1
)
n
=c_1n^2 - c_2n - (c_2 - 1)n
=c1n2−c2n−(c2−1)n, 当
c
2
−
1
≥
0
c_2 - 1 \geq 0
c2−1≥0, 即
c
2
≥
1
c_2 \geq 1
c2≥1时
≤
c
1
n
2
−
c
2
n
\leq c_1n^2 - c_2n
≤c1n2−c2n
Base case,
T
(
1
)
=
Θ
(
1
)
≤
c
1
−
c
2
T(1) =\Theta(1) \leq c_1 - c_2
T(1)=Θ(1)≤c1−c2, 只要
c
1
c_1
c1相对于
c
2
c_2
c2足够大即可满足
T
(
1
)
=
Θ
(
1
)
T(1) = \Theta (1)
T(1)=Θ(1)。
证毕。