第二章 和式
2.1 记号
2.1.1 省略号与一般和式
省略号 ... 表示项之间的可识别模式。例如:
1+2+3+⋯+n
表示前 n 个正整数之和。
若模式不明确,表达式无意义。 例如:
1+7+⋯+41.7
在没有上下文的情况下无法确定其规律。
当模式清晰时,无需过度指定。 写成 1+2+⋯+n 已足够清楚,甚至可简写为 1+⋯+n。
考虑一般形式的和:
a1+a2+⋯+an(2.1)
其中每个 ak 是用某种方式定义的一个数。
和式的每个元素 ak 称为项(term)。项常常隐含一个容易领会的模式。在这样的情形下,有时必须把它们写成展开的形式,以使意义清楚明白。
例如,设想:
1+2+⋯+2n−1
若要表示 n 项之和,而不是 2n−1 项之和,就应该更明确地写成:
20+21+⋯+2n−1
2.1.2 Σ符号
省略号“…”可能含糊不清且有点冗长。另一种方式是使用有确定界限的表达形式:
k=1∑nak(2.2)
称为 Σ 符号,因使用希腊字母 Σ(大写 σ)。
这个记号表示:**求和指标 k 取从 1 到 n 之间的所有整数值(含端点),并对对应的 ak 求和。**换句话说,"对 k 从 1 到 n 求和"。
Σ 后面的量(如 ak)称为被加数(summand)。
指标变量 k 与 Σ 符号密切相关,ak 中的 k 与 Σ 外出现的 k 无关。**任何其他字母都可以替代这里的 k 而不会改变 (2.2) 的含义。
常常会使用字母 i(似乎是因为它代表"指标"index),但我们一般还是对 k 求和,因为 i 另有重任要表示 −1。
不应使用 a 或 n 来替代式 (2.2) 中的 k 作为指标变量,因为那些字母是"自由变量",在 Σ 之外是有意义的。
一种推广的 Σ 符号比有确定界限的形式更加有用:我们直接把一个或多个条件写在 Σ 的下面,以此指定求和所应该取的指标集。
例如,(2.1) 和 (2.2) 中的和式也可以写成:
1≤k≤n∑ak(2.3)
在这个例子中,新形式与 (2.2) 没有太大区别,但一般形式允许我们对不限于连续整数的指标求和。
示例1:正奇数的平方和
不超过 100 的所有正奇数的平方和可表示为:
1≤k<100k 为奇数∑k2
而其有确定界限的等价形式:
k=0∑49(2k+1)2
更加繁琐不便,且不清晰。
示例2:素数的倒数之和
1 与 N 之间所有素数的倒数之和是:
p≤Np 为素数∑p1
而有确定界限的形式则需要写成:
k=1∑π(N)pk1
其中 pk 表示第 k 个素数,π(N) 是 ≤N 的素数个数。
附带指出,这个和式给出了接近 N 的随机整数的不同素因子的近似平均个数,因为那些整数中大约有 1/p 个能被 p 整除。对于大的 N,它的值近似等于 lnlnN+M,其中
M≈0.261 497 212 847 642 783 755 426 838 608 695 859 051 566 6
是麦尔滕常数,lnx 表示 x 的自然对数,而 lnlnx 表示 ln(lnx)。
优点二:容易变动
假设要将指标变量 k 改变成 k+1。
使用推广形式:
1≤k≤n∑ak=1≤k+1≤n∑ak+1
很容易看出所做的变动,几乎不需要思考。
而对于有确定界限的形式:
k=1∑nak=k=0∑n−1ak+1
不容易看出发生了什么变化,而且更容易犯错误。
- 当要陈述一个问题或表述一个结论时,常使用带有上下确定界限的 Σ;
- 当处理一个需要对指标变量做变换的和式时,则更愿意用在 Σ 下方列出关系的形式。
推广Σ的形式定义
形式上,我们将:
P(k)∑ak(2.4)
记为所有项 ak 之和的缩写,其中 k 是满足给定性质 P(k) 的一个整数。("性质 P(k)"是关于 k 的任何一个为真或者为假的命题。)
我们暂时假定仅有有限多个满足 P(k) 的整数 k 使得 ak=0;否则会有无穷多个非零的数相加,事情就会有点儿复杂。
在另一种极端情形,如果对所有的整数 k,P(k) 都不为真,我们就有一个"空的"和,任何空的和的值都定义为零。
人们常常想要使用:
k=2∑n−1k(k−1)(n−k)
而不是:
k=0∑nk(k−1)(n−k)
因为在这个和式中 k=0,1 以及 n 的项都等于零。将 n−2 项相加而不是将 n+1 项相加往往更为有效。
但是不应该这样想,因为计算的有效性并不等同于理解的有效性!
我们会发现,保持求和指标的上下限尽可能简单大有裨益,因为当求和的界限简单时,处理起来要容易得多。
使用如 ∑k=2n−1 这样的求和界限可能存在含糊不清的风险。
- 当 n=0 或 n=1 时,下限 k=2 大于上限 n−1≤0,此时求和范围为空,但其含义在未明确定义时并不清晰。
- 相比之下,包含额外项但其值为零的和式不会带来问题,反而常常免除许多麻烦。
对于任意命题 P,定义:
[P]={1,0,如果 P 为真;如果 P 为假.
例如:
[p 是素数]={1,0,p 是素数;p 不是素数.
利用艾弗森约定,我们可以将推广的Σ和式 (2.4) 重新写为:
k∑ak[P(k)](2.5)
- 这里求和指标 k 取所有整数,不再显式限制范围。
- 当 P(k) 为假时,[P(k)]=0,因此 ak[P(k)]=0,该项对和式无贡献。
- 所有“有效项”自动被保留,无效项被自然过滤。
求和不再需要在Σ下方写条件,指标可以自由流动,极大简化代数操作。
有时 ak 并非对所有整数 k 都有定义(例如 ak=1/k 在 k=0 时无定义)。
我们约定:当 P(k) 为假时,[P(k)]=0,且
ak[P(k)]=0,即使 ak 本身无定义。
这一约定规避了未定义表达式的问题。
示例
利用艾弗森约定,可将不超过 N 的素数倒数之和写为:
p∑[p 是素数][p≤N]/p
- 当 p=0 时,[0 是素数]=0,因此项为 0/0×0,但根据约定,整个项为 0。
- 不会出现除以零的问题,因为 [P(k)]=0 强制该项为零。
2.2 和式与递归式
和式与递归式之间存在密切关系,可以使用递推式求和式的值。
考虑和式:
Sn=k=0∑nak
它可以被看作一个定义在 n≥0 上的序列,满足递归关系:
S0=a0;Sn=Sn−1+an,n>0(2.6)
这种“和式 ⇔ 递归式”的转换,使我们能借用第1章中求解递归式的封闭形式方法来计算和式。
2.2.1 和式->递归式
[!IMPORTANT]
标准递推式:
R0=α;Rn=Rn−1+β+γn,n>0
只能处理被加数是线性函数的和式,即:
k=0∑n(β+γk)
考虑如下形式的递归式:
Rn=Rn−1+β+γn,n>0(2.7)
这是形如 ak=β+γk 的和式的递归形式。
通解和成套方法
我们尝试将通解形式
Rn=A(n)α+B(n)β+C(n)γ(2.8)
中的 Rn 替换为简单的已知函数,通过匹配递推关系 (2.7) 反推出对应的参数 α,β,γ,从而确定系数函数 A(n),B(n),C(n)。
令 Rn=1(常数函数)
- 此时对所有 n,有 Rn=1,且 R0=1⇒α=1。
- 递推式右边:
Rn−1+β+γn=1+β+γn
- 左边为 Rn=1,故要求:
1=1+β+γn⇒β+γn=0对所有 n>0
- 唯一可能:β=0,γ=0。
代入 (2.8):
1=A(n)⋅1+B(n)⋅0+C(n)⋅0⇒A(n)=1
得到:
令 Rn=n(线性函数)
- 此时 R0=0⇒α=0。
- 递推式右边:
Rn−1+β+γn=(n−1)+β+γn
- 左边为 Rn=n,故要求:
n=(n−1)+β+γn
整理得:
n=n−1+β+γn⇒0=−1+β+γn
- 对所有 n>0 成立,必须有:
γ=0,β=1
代入 (2.8):
n=A(n)⋅0+B(n)⋅1+C(n)⋅0⇒B(n)=n
得到:
令 Rn=n2(平方函数)
- 此时 R0=02=0⇒α=0。
- 递推式右边:
Rn−1+β+γn=(n−1)2+β+γn=n2−2n+1+β+γn
- 左边为 Rn=n2,故要求:
n2=n2−2n+1+β+γn
两边减去 n2:
0=−2n+1+β+γn
整理为:
(γ−2)n+(β+1)=0对所有 n>0
- 要使该式恒成立,系数必须为零:
γ−2=0⇒γ=2β+1=0⇒β=−1
代入 (2.8):
n2=A(n)⋅0+B(n)⋅(−1)+C(n)⋅2=−B(n)+2C(n)
但我们已知 B(n)=n,代入得:
n2=−n+2C(n)⇒2C(n)=n2+n⇒C(n)=2n2+n
得到:
C(n)=2n(n+1)
我们已得:
A(n)=1,B(n)=n,C(n)=2n(n+1)
通解为:
Rn=α⋅1+β⋅n+γ⋅2n(n+1)
现在验证它是否满足原始递推式:
Rn=Rn−1+β+γn
计算右边:
Rn−1+β+γn=α+β(n−1)+γ⋅2(n−1)n+β+γn
=α+βn−β+γ⋅2n(n−1)+β+γn
=α+βn+γ(2n(n−1)+n)=α+βn+γ⋅2n2+n
这正是 Rn 的表达式。
具体和式应用
我们想计算:
k=0∑n(a+bk)
第一步:建立递归关系
设:
Sn=k=0∑n(a+bk)
我们可以建立递归关系:
-
基础情况:当 n=0 时,
S0=a+b⋅0=a
-
递推关系:当 n>0 时,
Sn=Sn−1+(a+bn)
即:
Sn=Sn−1+a+bn
第二步:匹配标准递归式形式
将上述递归式与标准形式 (2.7) 对比:
R0=α;Rn=Rn−1+β+γn,n>0
我们有:
- Rn=Sn
- α=a(初始值)
- β=a(常数项系数)
- γ=b(线性项系数)
第三步:应用通解公式
根据已求得的系数函数:
A(n)=1,B(n)=n,C(n)=2n(n+1)
代入通解:
Sn=α⋅A(n)+β⋅B(n)+γ⋅C(n)
Sn=a⋅1+a⋅n+b⋅2n(n+1)
Sn=a+an+2bn(n+1)
Sn=a(1+n)+2bn(n+1)
Sn=a(n+1)+2bn(n+1)
第四步:提取公因子
Sn=(n+1)(a+2bn)
或者写成:
k=0∑n(a+bk)=a(n+1)+2bn(n+1)
验证特殊情况
-
当 a=1,b=0 时:
k=0∑n1=n+1
正确
-
当 a=0,b=1 时:
k=0∑nk=2n(n+1)
正确
[!NOTE]
解题思路:
- 将和式转化为递归式
- 设 Sn=∑k=0nf(k)
- 建立递归关系:Sn=Sn−1+f(n),S0=f(0)
- 识别递归式参数
- 将具体递归式与标准形式 Rn=Rn−1+β+γn 对比
- 确定参数 α,β,γ
- 应用成套方法求通解
- 利用已知的系数函数:A(n)=1,B(n)=n,C(n)=2n(n+1)
- 代入通解公式:Sn=αA(n)+βB(n)+γC(n)
- 得到封闭形式
[!IMPORTANT]
为什么可以直接套用
我们的标准递归式:
R0=α;Rn=Rn−1+β+γn,n>0
这是一个关于参数 α,β,γ 的线性表达式。
通解形式:
Rn=A(n)α+B(n)β+C(n)γ
这表明 Rn 是参数 α,β,γ 的线性组合。
由于递归式是线性的,我们可以利用叠加原理:
- 如果 Rn(1) 对应参数 (α1,β1,γ1)
- 如果 Rn(2) 对应参数 (α2,β2,γ2)
- 那么 c1Rn(1)+c2Rn(2) 对应参数 (c1α1+c2α2,c1β1+c2β2,c1γ1+c2γ2)
我们选择三个简单的基底函数来确定系数:
| 基底函数 | 参数 | 确定的系数 |
|---|
| Rn=1 | α=1,β=0,γ=0 | A(n)=1 |
| Rn=n | α=0,β=1,γ=0 | B(n)=n |
| Rn=n2 | α=0,β=−1,γ=2 | C(n)=2n(n+1) |
因为:
- 任何满足该递归式的函数都可以表示为这三个基底的线性组合
- 系数函数 A(n), B(n), C(n) 只依赖于递归式的结构,而不依赖于具体的参数值
- 一旦确定了这三个系数函数,它们对所有同类型递归式都适用
这实际上是在求解一个线性算子的基底表示:
- 递归式定义了一个从参数空间 (α,β,γ) 到解空间的线性映射
- A(n),B(n),C(n) 就是这个线性映射在标准基底下的表示
对于 Rn=5n+3:
- 可以分解为:Rn=3⋅1+5⋅n+0⋅2n(n+1)
- 对应参数:α=3,β=5,γ=0
- 直接套用:Rn=3⋅A(n)+5⋅B(n)+0⋅C(n)=3⋅1+5⋅n=3+5n
2.2.2 递归式->和式
引例:河内塔递归式
经典递归式:
T0=0;Tn=2Tn−1+1,n>0
两边同除 2n:
2nTn=2n−1Tn−1+2n1
令 Sn=Tn/2n,则:
S0=0;Sn=Sn−1+2−n,n>0
于是:
Sn=k=1∑n2−k
注意:和式从 k=1 开始,因为递推从 n>0 开始,S1=2−1。
这是一个几何级数:
[!NOTE]
几何级数(Geometric Series)是各项之间具有固定比例关系的无穷级数。
一般形式
k=0∑∞ark=a+ar+ar2+ar3+⋯
其中:
-
a:首项(first term)
-
r:公比(common ratio)
有限几何级数
k=0∑nark=a+ar+ar2+⋯+arn
收敛条件
几何级数收敛当且仅当 ∣r∣<1
发散情况
-
当 ∣r∣≥1 时,级数发散
-
当 r=1 时,级数变为 ∑a,发散到无穷
-
当 r=−1 时,级数振荡发散
-
当 ∣r∣>1 时,级数绝对值发散到无穷
有限几何级数求和
k=0∑nark=a1−r1−rn+1,r=1
推导过程:
设 Sn=a+ar+ar2+⋯+arn
则 rSn=ar+ar2+ar3+⋯+arn+1
两式相减:Sn−rSn=a−arn+1
因此:Sn=a1−r1−rn+1
无穷几何级数求和
当 ∣r∣<1 时:
k=0∑∞ark=1−ra
推导:当 ∣r∣<1 时,limn→∞rn+1=0,所以:
k=0∑∞ark=n→∞lima1−r1−rn+1=1−ra
基本几何级数
k=0∑∞rk=1−r1,∣r∣<1
从k=1开始
k=1∑∞rk=1−rr,∣r∣<1
交错级数
k=0∑∞(−1)krk=1+r1,∣r∣<1
核心公式
k=0∑∞ark=1−ra,∣r∣<1
收敛条件
∣r∣<1 时收敛,∣r∣≥1 时发散
有限和公式
k=0∑nark=a1−r1−rn+1,r=1
k=1∑n(21)k=1−1/21/2(1−(1/2)n)=1−(21)n
因此:
Tn=2nSn=2n(1−(21)n)=2n−1
一般化:求和因子法
一般形式
考虑线性递归式:
anTn=bnTn−1+cn(2.9)
[!NOTE]
河内塔递归式:
T0=0;Tn=2Tn−1+1,n>0
将其重写为标准形式:
1⋅Tn=2⋅Tn−1+1
这里 an=1,bn=2,cn=1。
思想:乘以一个求和因子 sn,使得:
snanTn=snbnTn−1+sncn
并令:
snbn=sn−1an−1
[!NOTE]
我们想要找到 sn 使得 sn⋅2=sn−1⋅1,即:
sn=2sn−1
这给出 sn=2−n(取 s0=1)。
这样定义:
Sn=snanTn
则递推变为:
Sn=Sn−1+sncn
[!NOTE]
对于河内塔:
- Sn=2−n⋅1⋅Tn=2nTn
- sncn=2−n⋅1=2n1
所以得到:
2nTn=2n−1Tn−1+2n1
即:
Sn=Sn−1+2n1
即:
Sn=S0+k=1∑nskck=s0a0T0+k=1∑nskck
由于 s1b1=s0a0,故 s0a0=s1b1,所以:
Sn=s1b1T0+k=1∑nskck
[!NOTE]
对于河内塔:
- S0=2−0⋅1⋅0=0
- skck=2−k⋅1=2k1
所以:
Sn=0+k=1∑n2k1=1−2n1
最终解为:
Tn=snan1(s1b1T0+k=1∑nskck)(2.10)
[!NOTE]
对于河内塔:
- snan=2−n⋅1=2−n
- s1b1T0=2−1⋅2⋅0=0
- ∑k=1nskck=∑k=1n2k1=1−2n1
所以:
Tn=2−n1(0+1−2n1)=2n(1−2n1)=2n−1
💡 s1 可取任意非零值,因为它在分子分母中成比例消去。
求和因子的构造
递推关系
由关键关系 snbn=sn−1an−1,可得:
sn=sn−1⋅bnan−1
递推展开
sn=sn−1⋅bnan−1=sn−2⋅bn−1an−2⋅bnan−1=⋯
通项公式
sn=bnbn−1⋯b2an−1an−2⋯a1⋅s1(2.11)
这给出了求和因子的一般构造方法(相差一个非零常数倍数)。
[!NOTE]
对于河内塔:an=1,bn=2
sn=2⋅2⋯21⋅1⋯1⋅s1=2n−11⋅s1
取 s1=21,则 sn=2n1,这正是我们之前使用的求和因子!
前提条件:所有 an=0, bn=0,否则无法进行除法运算。
方法总结
- 识别标准形式:将递归式写成 anTn=bnTn−1+cn
- 构造求和因子:使用 sn=bn⋯b2an−1⋯a1
- 乘以求和因子:得到 Sn=Sn−1+sncn
- 求和求解:Sn=S0+∑k=1nskck
- 还原原变量:Tn=snanSn
[!NOTE]
河内塔如何用这套方法解决:
- 标准形式:1⋅Tn=2⋅Tn−1+1
- 求和因子:sn=2n1
- 变换:2nTn=2n−1Tn−1+2n1
- 求和:2nTn=∑k=1n2k1=1−2n1
- 还原:Tn=2n−1
应用:快速排序
[!CAUTION]
def partition(A, p, r):
"""
将子数组 A[p..r] 按主元划分成两部分:
- 左侧:所有元素 ≤ 主元
- 右侧:所有元素 > 主元
主元为 A[r],最终放置在正确位置并返回其索引。
参数:
A: 待划分的数组
p: 子数组起始索引(包含)
r: 子数组结束索引(包含)
返回值:
主元的最终位置(索引)
"""
x = A[r]
i = p - 1
for j in range(p, r):
if A[j] <= x:
i += 1
A[i], A[j] = A[j], A[i]
A[i + 1], A[r] = A[r], A[i + 1]
return i + 1
def quicksort(A, p, r):
"""
快速排序主函数:对数组 A[p..r] 进行原址排序。
参数:
A: 待排序数组
p: 当前排序区间的起始索引
r: 当前排序区间的结束索引
"""
if p < r:
q = partition(A, p, r)
quicksort(A, p, q - 1)
quicksort(A, q + 1, r)
快速排序由霍尔于1962年发明,其平均比较次数满足递归式:
C0=C1=0;
Cn=n+1+n2k=0∑n−1Ck,n>1(2.12)
化简递归式
先消去分母:两边乘 n:
nCn=n2+n+2k=0∑n−1Ck,n>1
将 n 替换为 n−1(要求 n>2):
(n−1)Cn−1=(n−1)2+(n−1)+2k=0∑n−2Ck
两式相减,消去求和号:
nCn−(n−1)Cn−1=[n2+n]−[(n−1)2+(n−1)]+2Cn−1
=(n2+n)−(n2−2n+1+n−1)+2Cn−1=2n+2Cn−1
整理得:
nCn=(n+1)Cn−1+2n,n>2
初始值:C0=C1=0, C2=3
应用求和因子法
此式为 (2.9) 形式,其中:
- an=n
- bn=n+1
- cn=2n,但需注意 n=1,2 的初始条件,可用艾弗森约定修正:
cn=2n−2[n=1]+2[n=2]
[!NOTE]
修正原因:
-
项 −2[n=1]:
当 n=1,原式左边为 1⋅C1=0,右边为 2C0+2⋅1=0+2=2,多出 2。
⇒ 减去 2 以使等式成立。
-
项 +2[n=2]:
当 n=2,实际 C2=3,代入左边:2⋅3=6,右边:3C1+2⋅2=0+4=4,少 2。
⇒ 加上 2 以匹配真值。
求和因子:
sn=bn⋯b2an−1⋯a1=(n+1)n⋯3(n−1)!=(n+1)!(n−1)!⋅2=(n+1)n2
取 sn=n(n+1)2
由线性递推通解公式((2.10)):
Cn=snan1(s1b1C0+k=1∑nskck)
已知:
- C0=0 ⇒ s1b1C0=0
- an=n, sn=n(n+1)2 ⇒ snan=n+12
- 所以:
Cn=snan1k=1∑nskck=2n+1k=1∑nskck
我们有:
sk=k(k+1)2,ck=2k−2[k=1]+2[k=2]
所以:
skck=sk⋅2k−2sk[k=1]+2sk[k=2]
逐项计算:
(1) 主项:sk⋅2k=k(k+1)2⋅2k=k+14
(2) 修正项:
- 当 k=1:−2s1=−2⋅1⋅22=−2⋅1=−2
- 当 k=2:+2s2=+2⋅2⋅32=+2⋅31=32
- 其他 k:修正项为 0
所以总和:
k=1∑nskck=k=1∑nk+14−2[k=1]+2[k=2](仅在 k=1,2 处有额外修正)
即:
k=1∑nskck=4k=1∑nk+11−2⋅δk1+2⋅δk2=4k=1∑nk+11−2+32(因为只在 k=1,2 发生)
注意:求和中的修正项是固定的数值,不是对每个 k 都加,而是当 k=1 时减 2,k=2 时加 32,所以总修正为:
−2+32=−34
因此:
k=1∑nskck=4k=1∑nk+11−34
Cn=2n+1k=1∑nskck=2n+1(4k=1∑nk+11−34)=2n+1⋅4(k=1∑nk+11−31)
=2(n+1)(k=1∑nk+11−31)=2(n+1)k=1∑nk+11−32(n+1)
最终结果
Cn=2(n+1)k=1∑nk+11−32(n+1),n>1
使用调和数计算最终结果
定义调和数:
Hn=1+21+31+⋯+n1=k=1∑nk1(2.13)
将和式用调和数表示:
k=1∑nk+11=Hn+1−1,其中 Hn+1=k=1∑n+1k1
代入得:
Cn=2(n+1)(Hn+1−1)−32(n+1)=2(n+1)(Hn+1−34)
验证小值:
n=2:
H3=1+21+31=611,
C2=2(3)(611−34)=6(611−68)=6⋅63=3
n=3:
H4=611+41=1225,
C3=2(4)(1225−34)=8(1225−1216)=8⋅129=6