《具体数学》学习笔记: 2.和式(上)
序言:
第二章—和式的内容较多也较杂,因此将分成两篇记录。
2.1 和式和递归式(Sum and Recurrences)
首先回顾上一章汉诺塔的递归式
T
0
=
0
;
T
n
=
2
T
n
−
1
+
1
,
n
>
0
;
\begin{aligned} &T_0 = 0; \\ &T_n = 2T_{n - 1} + 1,\ n>0; \end{aligned}
T0=0;Tn=2Tn−1+1, n>0;
- 数学归纳法:
根据递推关系式中,我们可以得到 T 1 = 1 , T 2 = 3 , T 3 = 7 , . . . . T_1 = 1, T_2 = 3, T_3 = 7,.... T1=1,T2=3,T3=7,....由此可以猜测到 T n = 2 n − 1 T_n = 2^n - 1 Tn=2n−1,然后利用数学归纳法进行证明即可。
- 配置等比数列:
改写递归式
T
n
+
1
=
2
(
T
n
−
1
+
1
)
,
n
>
0
;
T_n + 1 = 2(T_{n - 1} + 1), \ n>0;
Tn+1=2(Tn−1+1), n>0;
由此便有
T
0
+
1
=
1
T
n
+
1
=
2
n
,
n
>
0
;
\begin{aligned} &T_0 + 1 = 1 \\ &T_n + 1 = 2^n, \ n>0;\\ \end{aligned}
T0+1=1Tn+1=2n, n>0;
即
T
n
=
2
n
−
1
(
n
≥
0
)
T_n = 2 ^ n - 1 \ (n \ge0)
Tn=2n−1 (n≥0).
- 化成和式:
对递归式两边同除
2
n
2^n
2n,得到
T
0
/
2
0
=
0
;
T
n
/
2
n
=
T
n
−
1
/
2
n
−
1
+
1
/
2
n
,
n
>
0
;
\begin{aligned} &T_0 / 2^0 = 0; \\ &T_n / 2^n = T_{n - 1} / 2^{n-1} + 1/2^n,\ n>0; \end{aligned}
T0/20=0;Tn/2n=Tn−1/2n−1+1/2n, n>0;
命
S
n
=
T
n
/
2
n
S_n = T_n / 2^n
Sn=Tn/2n, 可以得到
S
n
=
∑
k
=
1
n
1
2
k
=
1
−
1
2
n
S_n = \sum_{k = 1}^{n}{\frac{1}{2^k}} = 1 - \frac{1}{2^n}
Sn=k=1∑n2k1=1−2n1
于是
T
n
=
2
n
S
n
=
2
n
−
1
,
n
≥
0
T_n = 2^nS_n = 2^n - 1, \ n \ge 0
Tn=2nSn=2n−1, n≥0
- 拓展
方法3.的思路可以进行拓展,对于形如
a
n
T
n
=
b
n
T
n
−
1
+
c
n
a_nT_n = b_nT_{n - 1} + c_n
anTn=bnTn−1+cn
的递归式,我们选取一个合适的求和因子(summation factor)
s
n
s_n
sn 乘两边
s
n
a
n
T
n
=
s
n
b
n
T
n
−
1
+
s
n
c
n
a
n
d
s
n
b
n
=
s
n
−
1
a
n
−
1
s_na_nT_n = s_nb_nT_{n - 1} + s_nc_n\\ {\rm and} \quad s_nb_n = s_{n - 1}a_{n - 1}
snanTn=snbnTn−1+sncnandsnbn=sn−1an−1
命
s
n
a
n
T
n
=
S
n
s_na_nT_n = S_n
snanTn=Sn, 则
S
n
=
S
n
−
1
+
s
n
c
n
S_n = S_{n - 1} + s_nc_n
Sn=Sn−1+sncn
从而
S
n
=
s
0
a
0
T
0
+
∑
k
=
1
n
s
k
c
k
=
s
1
b
1
T
0
+
∑
k
=
1
n
s
k
c
k
T
n
=
1
s
n
a
n
S
n
=
1
s
n
a
n
[
s
1
b
1
T
0
+
∑
k
=
1
n
s
k
c
k
]
S_n = s_0a_0T_0 + \sum_{k = 1}^{n}{s_kc_k}=s_1b_1T_0 + \sum_{k = 1}^{n}{s_kc_k}\\ T_n = \frac{1}{s_na_n}S_n = \frac{1}{s_na_n}[ s_1b_1T_0 + \sum_{k = 1}^{n}{s_kc_k}]
Sn=s0a0T0+k=1∑nskck=s1b1T0+k=1∑nskckTn=snan1Sn=snan1[s1b1T0+k=1∑nskck]
求和因子
s
n
s_n
sn,可以根据
s
n
=
s
n
−
1
a
n
−
1
/
b
n
s_n = s_{n-1}a_{n - 1} / b_n
sn=sn−1an−1/bn,解得
s
n
=
a
n
−
1
a
n
−
2
.
.
.
a
1
b
n
b
n
−
1
.
.
.
b
2
\red{s_n = \frac{a_{n-1}a_{n-2}...a_1}{b_nb_{n-1}...b_2}}
sn=bnbn−1...b2an−1an−2...a1
本书给出了关于快速排序(Quicksort)所做的比较步骤的平均次数的递归式
C
0
=
C
1
=
0
C
n
=
n
+
1
+
2
n
∑
k
=
0
n
−
1
C
k
,
n
>
1
\begin{aligned} &C_0 = C_1 = 0\\ &C_n = n + 1 + \frac{2}{n}\sum_{k=0}^{n-1}{C_k}, \ n>1 \end{aligned}
C0=C1=0Cn=n+1+n2k=0∑n−1Ck, n>1
化简的复杂步骤略去,最后使用方法3可以得到
C
n
=
2
(
n
+
1
)
∑
k
=
1
n
1
k
+
1
−
2
3
(
n
+
1
)
,
n
>
1
C_n = 2(n + 1)\sum_{k=1}^{n}{\frac{1}{k + 1}} -\frac{2}{3}(n + 1), \ n>1
Cn=2(n+1)k=1∑nk+11−32(n+1), n>1
这里注意到一个重要的和式—调和数
H
n
=
1
+
1
2
+
.
.
.
+
1
n
=
∑
k
=
1
n
1
k
\red{H_n = 1 + \frac{1}{2} + ... + \frac{1}{n} = \sum_{k=1}^{n}{\frac{1}{k}}}
Hn=1+21+...+n1=k=1∑nk1
而
∑
k
=
1
n
1
k
+
1
=
H
n
−
1
+
1
n
+
1
=
H
n
−
n
n
+
1
\sum_{k=1}^{n}{\frac{1}{k + 1}} = H_n - 1+ \frac{1}{n + 1} = H_n - \frac{n}{n + 1}
k=1∑nk+11=Hn−1+n+11=Hn−n+1n
2.2 扰动法(Perturbation Method)
将和式的单独一项从分离出去,是得出和式封闭形式的一个重要手段,称为扰动法。对于一个标准的和式
S
n
=
∑
0
≤
k
≤
n
a
k
S_n = \sum_{0\le k\le n}{a_k}
Sn=0≤k≤n∑ak
可以得到
S
n
+
1
=
S
n
+
a
n
+
1
=
a
0
+
∑
0
≤
k
≤
n
a
k
+
1
\red{S_{n + 1} = S_n + a_{n + 1} = a_0 + \sum_{0\le k\le n}{a_{k + 1}}}
Sn+1=Sn+an+1=a0+0≤k≤n∑ak+1
尝试用之解决几何级数(等比数列和),即
S
n
=
∑
0
≤
k
≤
n
a
x
k
S_n = \sum_{0\le k\le n}{ax^k}
Sn=0≤k≤n∑axk
则
S
n
+
a
x
n
+
1
=
a
+
x
∑
0
≤
k
≤
n
a
x
k
=
a
+
x
S
n
S_{n} + ax^{n+1} = a + x\sum_{0\le k\le n}{ax^{k}} = a + xS_n
Sn+axn+1=a+x0≤k≤n∑axk=a+xSn
移项直接得到
S
n
=
a
−
a
x
n
+
1
1
−
x
,
x
≠
1
S_{n} = \frac{a - ax^{n + 1}}{1-x}, \quad x \ne 1
Sn=1−xa−axn+1,x̸=1
进一步地,我们还可以用扰动法求
S
n
=
∑
0
≤
k
≤
n
k
x
k
S_n = \sum_{0\le k\le n}k{x^k}
Sn=∑0≤k≤nkxk,或者乘数为
k
k
k 的更高次幂的和式.