具体数学:和式(一) 定义和与递归式的转化

52 阅读7分钟

第二章 和式

2.1 记号

2.1.1 省略号与一般和式

  • 省略号的使用与局限

省略号 ... 表示项之间的可识别模式。例如:

1+2+3++n1 + 2 + 3 + \cdots + n

表示前 nn 个正整数之和。

若模式不明确,表达式无意义。 例如:

1+7++41.71 + 7 + \cdots + 41.7

在没有上下文的情况下无法确定其规律。

当模式清晰时,无需过度指定。 写成 1+2++n1 + 2 + \cdots + n 已足够清楚,甚至可简写为 1++n1 + \cdots + n


  • 一般和式与项的定义

考虑一般形式的和:

a1+a2++an(2.1)a_1 + a_2 + \cdots + a_n \tag{2.1}

其中每个 aka_k 是用某种方式定义的一个数。

和式的每个元素 aka_k 称为(term)。项常常隐含一个容易领会的模式。在这样的情形下,有时必须把它们写成展开的形式,以使意义清楚明白。

例如,设想:

1+2++2n11 + 2 + \cdots + 2^{n-1}

若要表示 nn 项之和,而不是 2n12^{n-1} 项之和,就应该更明确地写成:

20+21++2n12^0 + 2^1 + \cdots + 2^{n-1}

2.1.2 Σ符号

省略号“…”可能含糊不清且有点冗长。另一种方式是使用有确定界限的表达形式:

k=1nak(2.2)\sum_{k=1}^n a_k \tag{2.2}

称为 Σ 符号,因使用希腊字母 Σ(大写 σ)。

这个记号表示:**求和指标 kk 取从 1 到 nn 之间的所有整数值(含端点),并对对应的 aka_k 求和。**换句话说,"kk 从 1 到 nn 求和"。

Σ 后面的量(如 aka_k)称为被加数(summand)。

指标变量 kk 与 Σ 符号密切相关,aka_k 中的 kk 与 Σ 外出现的 kk 无关。**任何其他字母都可以替代这里的 kk 而不会改变 (2.2) 的含义。

常常会使用字母 ii(似乎是因为它代表"指标"index),但我们一般还是对 kk 求和,因为 ii 另有重任要表示 1\sqrt{-1}

不应使用 aann 来替代式 (2.2) 中的 kk 作为指标变量,因为那些字母是"自由变量",在 Σ 之外是有意义的。


一种推广的 Σ 符号比有确定界限的形式更加有用:我们直接把一个或多个条件写在 Σ 的下面,以此指定求和所应该取的指标集。

例如,(2.1) 和 (2.2) 中的和式也可以写成:

1knak(2.3)\sum_{1 \leq k \leq n} a_k \tag{2.3}

在这个例子中,新形式与 (2.2) 没有太大区别,但一般形式允许我们对不限于连续整数的指标求和。

  • 优点一:清晰

示例1:正奇数的平方和

不超过 100 的所有正奇数的平方和可表示为:

1k<100k 为奇数k2\sum_{\substack{1 \leq k < 100 \\ k\ \text{为奇数}}} k^2

而其有确定界限的等价形式:

k=049(2k+1)2\sum_{k=0}^{49} (2k+1)^2

更加繁琐不便,且不清晰。

示例2:素数的倒数之和

1 与 NN 之间所有素数的倒数之和是:

pNp 为素数1p\sum_{\substack{p \leq N \\ p\ \text{为素数}}} \frac{1}{p}

而有确定界限的形式则需要写成:

k=1π(N)1pk\sum_{k=1}^{\pi(N)} \frac{1}{p_k}

其中 pkp_k 表示第 kk 个素数,π(N)\pi(N)N\leq N 的素数个数。

附带指出,这个和式给出了接近 NN 的随机整数的不同素因子的近似平均个数,因为那些整数中大约有 1/p1/p 个能被 pp 整除。对于大的 NN,它的值近似等于 lnlnN+M\ln \ln N + M,其中

M0.261 497 212 847 642 783 755 426 838 608 695 859 051 566 6M \approx 0.261\ 497\ 212\ 847\ 642\ 783\ 755\ 426\ 838\ 608\ 695\ 859\ 051\ 566\ 6

是麦尔滕常数,lnx\ln x 表示 xx 的自然对数,而 lnlnx\ln \ln x 表示 ln(lnx)\ln(\ln x)

优点二:容易变动

假设要将指标变量 kk 改变成 k+1k+1

使用推广形式

1knak=1k+1nak+1\sum_{1 \leq k \leq n} a_k = \sum_{1 \leq k+1 \leq n} a_{k+1}

很容易看出所做的变动,几乎不需要思考。

而对于有确定界限的形式

k=1nak=k=0n1ak+1\sum_{k=1}^n a_k = \sum_{k=0}^{n-1} a_{k+1}

不容易看出发生了什么变化,而且更容易犯错误。

  • 当要陈述一个问题或表述一个结论时,常使用带有上下确定界限的 Σ;
  • 当处理一个需要对指标变量做变换的和式时,则更愿意用在 Σ 下方列出关系的形式。

推广Σ的形式定义

形式上,我们将:

P(k)ak(2.4)\sum_{P(k)} a_k \tag{2.4}

记为所有项 aka_k 之和的缩写,其中 kk 是满足给定性质 P(k)P(k) 的一个整数。("性质 P(k)P(k)"是关于 kk 的任何一个为真或者为假的命题。)

我们暂时假定仅有有限多个满足 P(k)P(k) 的整数 kk 使得 ak0a_k \neq 0;否则会有无穷多个非零的数相加,事情就会有点儿复杂。

在另一种极端情形,如果对所有的整数 kkP(k)P(k) 都不为真,我们就有一个"空的"和,任何空的和的值都定义为零


  • 错误用法案例

人们常常想要使用:

k=2n1k(k1)(nk)\sum_{k=2}^{n-1} k(k-1)(n-k)

而不是:

k=0nk(k1)(nk)\sum_{k=0}^{n} k(k-1)(n-k)

因为在这个和式中 k=0,1k = 0, 1 以及 nn 的项都等于零。将 n2n - 2 项相加而不是将 n+1n + 1 项相加往往更为有效。

但是不应该这样想,因为计算的有效性并不等同于理解的有效性

我们会发现,保持求和指标的上下限尽可能简单大有裨益,因为当求和的界限简单时,处理起来要容易得多

使用如 k=2n1\sum_{k=2}^{n-1} 这样的求和界限可能存在含糊不清的风险

  • n=0n = 0n=1n = 1 时,下限 k=2k = 2 大于上限 n10n - 1 \leq 0,此时求和范围为空,但其含义在未明确定义时并不清晰
  • 相比之下,包含额外项但其值为零的和式不会带来问题,反而常常免除许多麻烦

  • 艾弗森约定

对于任意命题 PP,定义:

[P]={1,如果 P 为真;0,如果 P 为假.[P] = \begin{cases} 1, & \text{如果 } P \text{ 为真}; \\ 0, & \text{如果 } P \text{ 为假}. \end{cases}

例如:

[p 是素数]={1,p 是素数;0,p 不是素数.[p\text{ 是素数}] = \begin{cases} 1, & p\text{ 是素数}; \\ 0, & p\text{ 不是素数}. \end{cases}

利用艾弗森约定,我们可以将推广的Σ和式 (2.4) 重新写为:

kak[P(k)](2.5)\sum_{k} a_k [P(k)] \tag{2.5}
  • 这里求和指标 kk所有整数,不再显式限制范围。
  • P(k)P(k) 为假时,[P(k)]=0[P(k)] = 0,因此 ak[P(k)]=0a_k [P(k)] = 0,该项对和式无贡献。
  • 所有“有效项”自动被保留,无效项被自然过滤。

求和不再需要在Σ下方写条件,指标可以自由流动,极大简化代数操作。

有时 aka_k 并非对所有整数 kk 都有定义(例如 ak=1/ka_k = 1/kk=0k = 0 时无定义)。

我们约定:当 P(k)P(k) 为假时,[P(k)]=0[P(k)] = 0,且

ak[P(k)]=0a_k [P(k)] = 0,即使 aka_k 本身无定义。

这一约定规避了未定义表达式的问题

示例

利用艾弗森约定,可将不超过 NN 的素数倒数之和写为:

p[p 是素数][pN]/p\sum_{p} [p\text{ 是素数}] [p \leq N] / p
  • p=0p = 0 时,[0 是素数]=0[0\text{ 是素数}] = 0,因此项为 0/0×00 / 0 \times 0,但根据约定,整个项为 0。
  • 不会出现除以零的问题,因为 [P(k)]=0[P(k)] = 0 强制该项为零。

2.2 和式与递归式

和式与递归式之间存在密切关系,可以使用递推式求和式的值。

考虑和式:

Sn=k=0nakS_n = \sum_{k=0}^n a_k

它可以被看作一个定义在 n0n \geq 0 上的序列,满足递归关系:

S0=a0;Sn=Sn1+an,n>0(2.6)S_0 = a_0; \quad S_n = S_{n-1} + a_n, \quad n > 0 \tag{2.6}

这种“和式 ⇔ 递归式”的转换,使我们能借用第1章中求解递归式的封闭形式方法来计算和式。


2.2.1 和式->递归式

[!IMPORTANT]

标准递推式:

R0=α;Rn=Rn1+β+γn,n>0R_0 = \alpha; \quad R_n = R_{n-1} + \beta + \gamma n, \quad n > 0

只能处理被加数是线性函数的和式,即:

k=0n(β+γk)\sum_{k=0}^n (\beta + \gamma k)

考虑如下形式的递归式:

R0=α;R_0 = \alpha;
Rn=Rn1+β+γn,n>0(2.7)R_n = R_{n-1} + \beta + \gamma n, \quad n > 0 \tag{2.7}

这是形如 ak=β+γka_k = \beta + \gamma k 的和式的递归形式。

通解和成套方法

我们尝试将通解形式

Rn=A(n)α+B(n)β+C(n)γ(2.8)R_n = A(n)\alpha + B(n)\beta + C(n)\gamma \tag{2.8}

中的 RnR_n 替换为简单的已知函数,通过匹配递推关系 (2.7) 反推出对应的参数 α,β,γ\alpha, \beta, \gamma,从而确定系数函数 A(n),B(n),C(n)A(n), B(n), C(n)

Rn=1R_n = 1(常数函数)

  • 此时对所有 nn,有 Rn=1R_n = 1,且 R0=1α=1R_0 = 1 \Rightarrow \alpha = 1
  • 递推式右边:
    Rn1+β+γn=1+β+γnR_{n-1} + \beta + \gamma n = 1 + \beta + \gamma n
  • 左边为 Rn=1R_n = 1,故要求:
    1=1+β+γnβ+γn=0对所有 n>01 = 1 + \beta + \gamma n \quad \Rightarrow \quad \beta + \gamma n = 0 \quad \text{对所有 } n > 0
  • 唯一可能:β=0,γ=0\beta = 0, \gamma = 0

代入 (2.8):

1=A(n)1+B(n)0+C(n)0A(n)=11 = A(n) \cdot 1 + B(n) \cdot 0 + C(n) \cdot 0 \Rightarrow A(n) = 1

得到:

A(n)=1A(n) = 1

Rn=nR_n = n(线性函数)

  • 此时 R0=0α=0R_0 = 0 \Rightarrow \alpha = 0
  • 递推式右边:
    Rn1+β+γn=(n1)+β+γnR_{n-1} + \beta + \gamma n = (n-1) + \beta + \gamma n
  • 左边为 Rn=nR_n = n,故要求:
    n=(n1)+β+γnn = (n-1) + \beta + \gamma n
    整理得:
    n=n1+β+γn0=1+β+γnn = n - 1 + \beta + \gamma n \Rightarrow 0 = -1 + \beta + \gamma n
  • 对所有 n>0n > 0 成立,必须有:
    γ=0,β=1\gamma = 0, \quad \beta = 1

代入 (2.8):

n=A(n)0+B(n)1+C(n)0B(n)=nn = A(n) \cdot 0 + B(n) \cdot 1 + C(n) \cdot 0 \Rightarrow B(n) = n

得到:

B(n)=nB(n) = n

Rn=n2R_n = n^2(平方函数)

  • 此时 R0=02=0α=0R_0 = 0^2 = 0 \Rightarrow \alpha = 0
  • 递推式右边:
    Rn1+β+γn=(n1)2+β+γn=n22n+1+β+γnR_{n-1} + \beta + \gamma n = (n-1)^2 + \beta + \gamma n = n^2 - 2n + 1 + \beta + \gamma n
  • 左边为 Rn=n2R_n = n^2,故要求:
    n2=n22n+1+β+γnn^2 = n^2 - 2n + 1 + \beta + \gamma n
    两边减去 n2n^2
    0=2n+1+β+γn0 = -2n + 1 + \beta + \gamma n
    整理为:
    (γ2)n+(β+1)=0对所有 n>0(\gamma - 2)n + (\beta + 1) = 0 \quad \text{对所有 } n > 0
  • 要使该式恒成立,系数必须为零:
    γ2=0γ=2β+1=0β=1\gamma - 2 = 0 \Rightarrow \gamma = 2 \\ \beta + 1 = 0 \Rightarrow \beta = -1

代入 (2.8):

n2=A(n)0+B(n)(1)+C(n)2=B(n)+2C(n)n^2 = A(n)\cdot 0 + B(n)\cdot (-1) + C(n)\cdot 2 = -B(n) + 2C(n)

但我们已知 B(n)=nB(n) = n,代入得:

n2=n+2C(n)2C(n)=n2+nC(n)=n2+n2n^2 = -n + 2C(n) \Rightarrow 2C(n) = n^2 + n \Rightarrow C(n) = \frac{n^2 + n}{2}

得到:

C(n)=n(n+1)2C(n) = \frac{n(n+1)}{2}

我们已得:

A(n)=1,B(n)=n,C(n)=n(n+1)2A(n) = 1, \quad B(n) = n, \quad C(n) = \frac{n(n+1)}{2}

通解为:

Rn=α1+βn+γn(n+1)2R_n = \alpha \cdot 1 + \beta \cdot n + \gamma \cdot \frac{n(n+1)}{2}

现在验证它是否满足原始递推式:

Rn=Rn1+β+γnR_n = R_{n-1} + \beta + \gamma n

计算右边:

Rn1+β+γn=α+β(n1)+γ(n1)n2+β+γnR_{n-1} + \beta + \gamma n = \alpha + \beta(n-1) + \gamma \cdot \frac{(n-1)n}{2} + \beta + \gamma n
=α+βnβ+γn(n1)2+β+γn= \alpha + \beta n - \beta + \gamma \cdot \frac{n(n-1)}{2} + \beta + \gamma n
=α+βn+γ(n(n1)2+n)=α+βn+γn2+n2= \alpha + \beta n + \gamma \left( \frac{n(n-1)}{2} + n \right) = \alpha + \beta n + \gamma \cdot \frac{n^2 + n}{2}

这正是 RnR_n 的表达式。

具体和式应用

我们想计算:

k=0n(a+bk)\sum_{k=0}^n (a + b k)

第一步:建立递归关系

设:

Sn=k=0n(a+bk)S_n = \sum_{k=0}^n (a + b k)

我们可以建立递归关系:

  • 基础情况:当 n=0n = 0 时,

    S0=a+b0=aS_0 = a + b \cdot 0 = a
  • 递推关系:当 n>0n > 0 时,

    Sn=Sn1+(a+bn)S_n = S_{n-1} + (a + b n)

    即:

    Sn=Sn1+a+bnS_n = S_{n-1} + a + b n

第二步:匹配标准递归式形式

将上述递归式与标准形式 (2.7) 对比:

R0=α;Rn=Rn1+β+γn,n>0R_0 = \alpha; \quad R_n = R_{n-1} + \beta + \gamma n, \quad n > 0

我们有:

  • Rn=SnR_n = S_n
  • α=a\alpha = a(初始值)
  • β=a\beta = a(常数项系数)
  • γ=b\gamma = b(线性项系数)

第三步:应用通解公式

根据已求得的系数函数:

A(n)=1,B(n)=n,C(n)=n(n+1)2A(n) = 1, \quad B(n) = n, \quad C(n) = \frac{n(n+1)}{2}

代入通解:

Sn=αA(n)+βB(n)+γC(n)S_n = \alpha \cdot A(n) + \beta \cdot B(n) + \gamma \cdot C(n)
Sn=a1+an+bn(n+1)2S_n = a \cdot 1 + a \cdot n + b \cdot \frac{n(n+1)}{2}
Sn=a+an+bn(n+1)2S_n = a + a n + \frac{b n(n+1)}{2}
Sn=a(1+n)+bn(n+1)2S_n = a(1 + n) + \frac{b n(n+1)}{2}
Sn=a(n+1)+bn(n+1)2S_n = a(n+1) + \frac{b n(n+1)}{2}

第四步:提取公因子

Sn=(n+1)(a+bn2)S_n = (n+1)\left(a + \frac{b n}{2}\right)

或者写成:

k=0n(a+bk)=a(n+1)+bn(n+1)2\sum_{k=0}^n (a + b k) = a(n+1) + \frac{b n(n+1)}{2}

验证特殊情况

  • a=1,b=0a = 1, b = 0 时:

    k=0n1=n+1\sum_{k=0}^n 1 = n+1

    正确

  • a=0,b=1a = 0, b = 1 时:

    k=0nk=n(n+1)2\sum_{k=0}^n k = \frac{n(n+1)}{2}

    正确

[!NOTE]

解题思路:

  1. 将和式转化为递归式
    • Sn=k=0nf(k)S_n = \sum_{k=0}^n f(k)
    • 建立递归关系:Sn=Sn1+f(n)S_n = S_{n-1} + f(n)S0=f(0)S_0 = f(0)
  2. 识别递归式参数
    • 将具体递归式与标准形式 Rn=Rn1+β+γnR_n = R_{n-1} + \beta + \gamma n 对比
    • 确定参数 α,β,γ\alpha, \beta, \gamma
  3. 应用成套方法求通解
    • 利用已知的系数函数:A(n)=1,B(n)=n,C(n)=n(n+1)2A(n) = 1, B(n) = n, C(n) = \frac{n(n+1)}{2}
    • 代入通解公式:Sn=αA(n)+βB(n)+γC(n)S_n = \alpha A(n) + \beta B(n) + \gamma C(n)
  4. 得到封闭形式
    • 化简得到和式的闭形式解

[!IMPORTANT]

为什么可以直接套用

我们的标准递归式:

R0=α;Rn=Rn1+β+γn,n>0R_0 = \alpha; \quad R_n = R_{n-1} + \beta + \gamma n, \quad n > 0

这是一个关于参数 α,β,γ\alpha, \beta, \gamma 的线性表达式

通解形式:

Rn=A(n)α+B(n)β+C(n)γR_n = A(n)\alpha + B(n)\beta + C(n)\gamma

这表明 RnR_n 是参数 α,β,γ\alpha, \beta, \gamma线性组合

由于递归式是线性的,我们可以利用叠加原理

  • 如果 Rn(1)R_n^{(1)} 对应参数 (α1,β1,γ1)(\alpha_1, \beta_1, \gamma_1)
  • 如果 Rn(2)R_n^{(2)} 对应参数 (α2,β2,γ2)(\alpha_2, \beta_2, \gamma_2)
  • 那么 c1Rn(1)+c2Rn(2)c_1 R_n^{(1)} + c_2 R_n^{(2)} 对应参数 (c1α1+c2α2,c1β1+c2β2,c1γ1+c2γ2)(c_1\alpha_1 + c_2\alpha_2, c_1\beta_1 + c_2\beta_2, c_1\gamma_1 + c_2\gamma_2)

我们选择三个简单的基底函数来确定系数:

基底函数参数确定的系数
Rn=1R_n = 1α=1,β=0,γ=0\alpha=1, \beta=0, \gamma=0A(n)=1A(n) = 1
Rn=nR_n = nα=0,β=1,γ=0\alpha=0, \beta=1, \gamma=0B(n)=nB(n) = n
Rn=n2R_n = n^2α=0,β=1,γ=2\alpha=0, \beta=-1, \gamma=2C(n)=n(n+1)2C(n) = \frac{n(n+1)}{2}

因为:

  1. 任何满足该递归式的函数都可以表示为这三个基底的线性组合
  2. 系数函数 A(n), B(n), C(n) 只依赖于递归式的结构,而不依赖于具体的参数值
  3. 一旦确定了这三个系数函数,它们对所有同类型递归式都适用

这实际上是在求解一个线性算子的基底表示:

  • 递归式定义了一个从参数空间 (α,β,γ)(\alpha, \beta, \gamma) 到解空间的线性映射
  • A(n),B(n),C(n)A(n), B(n), C(n) 就是这个线性映射在标准基底下的表示

对于 Rn=5n+3R_n = 5n + 3

  1. 可以分解为:Rn=31+5n+0n(n+1)2R_n = 3 \cdot 1 + 5 \cdot n + 0 \cdot \frac{n(n+1)}{2}
  2. 对应参数:α=3,β=5,γ=0\alpha=3, \beta=5, \gamma=0
  3. 直接套用:Rn=3A(n)+5B(n)+0C(n)=31+5n=3+5nR_n = 3 \cdot A(n) + 5 \cdot B(n) + 0 \cdot C(n) = 3 \cdot 1 + 5 \cdot n = 3 + 5n

2.2.2 递归式->和式

引例:河内塔递归式

经典递归式:

T0=0;Tn=2Tn1+1,n>0T_0 = 0; \quad T_n = 2T_{n-1} + 1, \quad n > 0

两边同除 2n2^n

Tn2n=Tn12n1+12n\frac{T_n}{2^n} = \frac{T_{n-1}}{2^{n-1}} + \frac{1}{2^n}

Sn=Tn/2nS_n = T_n / 2^n,则:

S0=0;Sn=Sn1+2n,n>0S_0 = 0; \quad S_n = S_{n-1} + 2^{-n}, \quad n > 0

于是:

Sn=k=1n2kS_n = \sum_{k=1}^n 2^{-k}

注意:和式从 k=1k=1 开始,因为递推从 n>0n>0 开始,S1=21S_1 = 2^{-1}

这是一个几何级数

[!NOTE]

几何级数(Geometric Series)是各项之间具有固定比例关系的无穷级数。

一般形式

k=0ark=a+ar+ar2+ar3+\sum_{k=0}^{\infty} ar^k = a + ar + ar^2 + ar^3 + \cdots

其中:

  • aa:首项(first term)

  • rr:公比(common ratio)

有限几何级数

k=0nark=a+ar+ar2++arn\sum_{k=0}^{n} ar^k = a + ar + ar^2 + \cdots + ar^n

收敛条件

几何级数收敛当且仅当 r<1|r| < 1

发散情况

  • r1|r| \geq 1 时,级数发散

  • r=1r = 1 时,级数变为 a\sum a,发散到无穷

  • r=1r = -1 时,级数振荡发散

  • r>1|r| > 1 时,级数绝对值发散到无穷

有限几何级数求和

k=0nark=a1rn+11r,r1\sum_{k=0}^{n} ar^k = a \frac{1-r^{n+1}}{1-r}, \quad r \neq 1

推导过程: 设 Sn=a+ar+ar2++arnS_n = a + ar + ar^2 + \cdots + ar^n

rSn=ar+ar2+ar3++arn+1rS_n = ar + ar^2 + ar^3 + \cdots + ar^{n+1}

两式相减:SnrSn=aarn+1S_n - rS_n = a - ar^{n+1}

因此:Sn=a1rn+11rS_n = a \frac{1-r^{n+1}}{1-r}

无穷几何级数求和

r<1|r| < 1 时:

k=0ark=a1r\sum_{k=0}^{\infty} ar^k = \frac{a}{1-r}

推导:当 r<1|r| < 1 时,limnrn+1=0\lim_{n \to \infty} r^{n+1} = 0,所以:

k=0ark=limna1rn+11r=a1r\sum_{k=0}^{\infty} ar^k = \lim_{n \to \infty} a \frac{1-r^{n+1}}{1-r} = \frac{a}{1-r}

基本几何级数

k=0rk=11r,r<1\sum_{k=0}^{\infty} r^k = \frac{1}{1-r}, \quad |r| < 1

从k=1开始

k=1rk=r1r,r<1\sum_{k=1}^{\infty} r^k = \frac{r}{1-r}, \quad |r| < 1

交错级数

k=0(1)krk=11+r,r<1\sum_{k=0}^{\infty} (-1)^k r^k = \frac{1}{1+r}, \quad |r| < 1

核心公式

k=0ark=a1r,r<1\boxed{\sum_{k=0}^{\infty} ar^k = \frac{a}{1-r}, \quad |r| < 1}

收敛条件

r<1 时收敛,r1 时发散\boxed{|r| < 1 \text{ 时收敛,}|r| \geq 1 \text{ 时发散}}

有限和公式

k=0nark=a1rn+11r,r1\boxed{\sum_{k=0}^{n} ar^k = a \frac{1-r^{n+1}}{1-r}, \quad r \neq 1}
k=1n(12)k=1/2(1(1/2)n)11/2=1(12)n\sum_{k=1}^n \left(\frac{1}{2}\right)^k = \frac{1/2 \left(1 - (1/2)^n\right)}{1 - 1/2} = 1 - \left(\frac{1}{2}\right)^n

因此:

Tn=2nSn=2n(1(12)n)=2n1T_n = 2^n S_n = 2^n \left(1 - \left(\frac{1}{2}\right)^n\right) = 2^n - 1

一般化:求和因子法

一般形式

考虑线性递归式:

anTn=bnTn1+cn(2.9)a_n T_n = b_n T_{n-1} + c_n \tag{2.9}

[!NOTE]

河内塔递归式:

T0=0;Tn=2Tn1+1,n>0T_0 = 0; \quad T_n = 2T_{n-1} + 1, \quad n > 0

将其重写为标准形式:

1Tn=2Tn1+11 \cdot T_n = 2 \cdot T_{n-1} + 1

这里 an=1,bn=2,cn=1a_n = 1, b_n = 2, c_n = 1

思想:乘以一个求和因子 sns_n,使得:

snanTn=snbnTn1+sncns_n a_n T_n = s_n b_n T_{n-1} + s_n c_n

并令:

snbn=sn1an1s_n b_n = s_{n-1} a_{n-1}

[!NOTE]

我们想要找到 sns_n 使得 sn2=sn11s_n \cdot 2 = s_{n-1} \cdot 1,即:

sn=sn12s_n = \frac{s_{n-1}}{2}

这给出 sn=2ns_n = 2^{-n}(取 s0=1s_0 = 1)。

这样定义:

Sn=snanTnS_n = s_n a_n T_n

则递推变为:

Sn=Sn1+sncnS_n = S_{n-1} + s_n c_n

[!NOTE]

对于河内塔:

  • Sn=2n1Tn=Tn2nS_n = 2^{-n} \cdot 1 \cdot T_n = \frac{T_n}{2^n}
  • sncn=2n1=12ns_n c_n = 2^{-n} \cdot 1 = \frac{1}{2^n}

所以得到:

Tn2n=Tn12n1+12n\frac{T_n}{2^n} = \frac{T_{n-1}}{2^{n-1}} + \frac{1}{2^n}

即:

Sn=Sn1+12nS_n = S_{n-1} + \frac{1}{2^n}

即:

Sn=S0+k=1nskck=s0a0T0+k=1nskckS_n = S_0 + \sum_{k=1}^n s_k c_k = s_0 a_0 T_0 + \sum_{k=1}^n s_k c_k

由于 s1b1=s0a0s_1 b_1 = s_0 a_0,故 s0a0=s1b1s_0 a_0 = s_1 b_1,所以:

Sn=s1b1T0+k=1nskckS_n = s_1 b_1 T_0 + \sum_{k=1}^n s_k c_k

[!NOTE]

对于河内塔:

  • S0=2010=0S_0 = 2^{-0} \cdot 1 \cdot 0 = 0
  • skck=2k1=12ks_k c_k = 2^{-k} \cdot 1 = \frac{1}{2^k}

所以:

Sn=0+k=1n12k=112nS_n = 0 + \sum_{k=1}^n \frac{1}{2^k} = 1 - \frac{1}{2^n}

最终解为:

Tn=1snan(s1b1T0+k=1nskck)(2.10)T_n = \frac{1}{s_n a_n} \left( s_1 b_1 T_0 + \sum_{k=1}^n s_k c_k \right) \tag{2.10}

[!NOTE]

对于河内塔:

  • snan=2n1=2ns_n a_n = 2^{-n} \cdot 1 = 2^{-n}
  • s1b1T0=2120=0s_1 b_1 T_0 = 2^{-1} \cdot 2 \cdot 0 = 0
  • k=1nskck=k=1n12k=112n\sum_{k=1}^n s_k c_k = \sum_{k=1}^n \frac{1}{2^k} = 1 - \frac{1}{2^n}

所以:

Tn=12n(0+112n)=2n(112n)=2n1T_n = \frac{1}{2^{-n}} \left( 0 + 1 - \frac{1}{2^n} \right) = 2^n \left( 1 - \frac{1}{2^n} \right) = 2^n - 1

💡 s1s_1 可取任意非零值,因为它在分子分母中成比例消去。


求和因子的构造
递推关系

由关键关系 snbn=sn1an1s_n b_n = s_{n-1} a_{n-1},可得:

sn=sn1an1bns_n = s_{n-1} \cdot \frac{a_{n-1}}{b_n}

递推展开

sn=sn1an1bn=sn2an2bn1an1bn=s_n = s_{n-1} \cdot \frac{a_{n-1}}{b_n} = s_{n-2} \cdot \frac{a_{n-2}}{b_{n-1}} \cdot \frac{a_{n-1}}{b_n} = \cdots

通项公式

sn=an1an2a1bnbn1b2s1(2.11)s_n = \frac{a_{n-1} a_{n-2} \cdots a_1}{b_n b_{n-1} \cdots b_2} \cdot s_1 \tag{2.11}

这给出了求和因子的一般构造方法(相差一个非零常数倍数)。

[!NOTE]

对于河内塔:an=1,bn=2a_n = 1, b_n = 2

sn=111222s1=12n1s1s_n = \frac{1 \cdot 1 \cdots 1}{2 \cdot 2 \cdots 2} \cdot s_1 = \frac{1}{2^{n-1}} \cdot s_1

s1=12s_1 = \frac{1}{2},则 sn=12ns_n = \frac{1}{2^n},这正是我们之前使用的求和因子!

前提条件:所有 an0a_n \ne 0, bn0b_n \ne 0,否则无法进行除法运算。

方法总结
  1. 识别标准形式:将递归式写成 anTn=bnTn1+cna_n T_n = b_n T_{n-1} + c_n
  2. 构造求和因子:使用 sn=an1a1bnb2s_n = \frac{a_{n-1} \cdots a_1}{b_n \cdots b_2}
  3. 乘以求和因子:得到 Sn=Sn1+sncnS_n = S_{n-1} + s_n c_n
  4. 求和求解Sn=S0+k=1nskckS_n = S_0 + \sum_{k=1}^n s_k c_k
  5. 还原原变量Tn=SnsnanT_n = \frac{S_n}{s_n a_n}

[!NOTE]

河内塔如何用这套方法解决:

  1. 标准形式1Tn=2Tn1+11 \cdot T_n = 2 \cdot T_{n-1} + 1
  2. 求和因子sn=12ns_n = \frac{1}{2^n}
  3. 变换Tn2n=Tn12n1+12n\frac{T_n}{2^n} = \frac{T_{n-1}}{2^{n-1}} + \frac{1}{2^n}
  4. 求和Tn2n=k=1n12k=112n\frac{T_n}{2^n} = \sum_{k=1}^n \frac{1}{2^k} = 1 - \frac{1}{2^n}
  5. 还原Tn=2n1T_n = 2^n - 1
应用:快速排序

[!CAUTION]

def partition(A, p, r):
    """
    将子数组 A[p..r] 按主元划分成两部分:

   - 左侧:所有元素 ≤ 主元
     - 右侧:所有元素 > 主元
       主元为 A[r],最终放置在正确位置并返回其索引。
	参数:
	A: 待划分的数组
	p: 子数组起始索引(包含)
	r: 子数组结束索引(包含)

	返回值:
	主元的最终位置(索引)
	"""
	x = A[r]        # 选择最后一个元素作为主元
	i = p - 1       # i 指向小于等于主元区域的最后一个位置

	# 遍历从 p 到 r-1 的每个元素
	for j in range(p, r):
    	# 如果当前元素小于等于主元
    	if A[j] <= x:
        	i += 1  # 扩展小于等于区域
        	A[i], A[j] = A[j], A[i]  # 将 A[j] 交换到左侧区域

	# 将主元 A[r] 放置到正确位置(i+1)
	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:  # 基本情况:当 p >= r 时,子数组长度 <= 1,无需排序
    	q = partition(A, p, r)      # 划分数组,q 为主元的最终位置
    	quicksort(A, p, q - 1)      # 递归排序左半部分 A[p..q-1]
    	quicksort(A, q + 1, r)      # 递归排序右半部分 A[q+1..r]

快速排序由霍尔于1962年发明,其平均比较次数满足递归式:

C0=C1=0;C_0 = C_1 = 0;
Cn=n+1+2nk=0n1Ck,n>1(2.12)C_n = n + 1 + \frac{2}{n} \sum_{k=0}^{n-1} C_k, \quad n > 1 \tag{2.12}

化简递归式

先消去分母:两边乘 nn

nCn=n2+n+2k=0n1Ck,n>1n C_n = n^2 + n + 2 \sum_{k=0}^{n-1} C_k, \quad n > 1

nn 替换为 n1n-1(要求 n>2n > 2):

(n1)Cn1=(n1)2+(n1)+2k=0n2Ck(n-1) C_{n-1} = (n-1)^2 + (n-1) + 2 \sum_{k=0}^{n-2} C_k

两式相减,消去求和号:

nCn(n1)Cn1=[n2+n][(n1)2+(n1)]+2Cn1n C_n - (n-1) C_{n-1} = [n^2 + n] - [(n-1)^2 + (n-1)] + 2 C_{n-1}
=(n2+n)(n22n+1+n1)+2Cn1=2n+2Cn1= (n^2 + n) - (n^2 - 2n + 1 + n - 1) + 2 C_{n-1} = 2n + 2 C_{n-1}

整理得:

nCn=(n+1)Cn1+2n,n>2n C_n = (n+1) C_{n-1} + 2n, \quad n > 2

初始值:C0=C1=0C_0 = C_1 = 0, C2=3C_2 = 3

应用求和因子法

此式为 (2.9) 形式,其中:

  • an=na_n = n
  • bn=n+1b_n = n+1
  • cn=2nc_n = 2n,但需注意 n=1,2n=1,2 的初始条件,可用艾弗森约定修正:
    cn=2n2[n=1]+2[n=2]c_n = 2n - 2[n=1] + 2[n=2]

[!NOTE]

修正原因

  • 2[n=1]-2[n=1]: 当 n=1n=1,原式左边为 1C1=01 \cdot C_1 = 0,右边为 2C0+21=0+2=22 C_0 + 2\cdot1 = 0 + 2 = 2,多出 2。
    ⇒ 减去 2 以使等式成立。

  • +2[n=2]+2[n=2]: 当 n=2n=2,实际 C2=3C_2 = 3,代入左边:23=62 \cdot 3 = 6,右边:3C1+22=0+4=43 C_1 + 2\cdot2 = 0 + 4 = 4,少 2。
    ⇒ 加上 2 以匹配真值。

求和因子:

sn=an1a1bnb2=(n1)!(n+1)n3=(n1)!2(n+1)!=2(n+1)ns_n = \frac{a_{n-1} \cdots a_1}{b_n \cdots b_2} = \frac{(n-1)!}{(n+1) n \cdots 3} = \frac{(n-1)! \cdot 2}{(n+1)!} = \frac{2}{(n+1)n}

sn=2n(n+1)s_n = \frac{2}{n(n+1)}

由线性递推通解公式((2.10)):

Cn=1snan(s1b1C0+k=1nskck)C_n = \frac{1}{s_n a_n} \left( s_1 b_1 C_0 + \sum_{k=1}^n s_k c_k \right)

已知:

  • C0=0C_0 = 0s1b1C0=0s_1 b_1 C_0 = 0
  • an=na_n = n, sn=2n(n+1)s_n = \frac{2}{n(n+1)}snan=2n+1s_n a_n = \frac{2}{n+1}
  • 所以:
    Cn=1snank=1nskck=n+12k=1nskckC_n = \frac{1}{s_n a_n} \sum_{k=1}^n s_k c_k = \frac{n+1}{2} \sum_{k=1}^n s_k c_k

我们有:

sk=2k(k+1),ck=2k2[k=1]+2[k=2]s_k = \frac{2}{k(k+1)}, \quad c_k = 2k - 2[k=1] + 2[k=2]

所以:

skck=sk2k2sk[k=1]+2sk[k=2]s_k c_k = s_k \cdot 2k - 2 s_k [k=1] + 2 s_k [k=2]

逐项计算:

(1) 主项:sk2k=2k(k+1)2k=4k+1s_k \cdot 2k = \frac{2}{k(k+1)} \cdot 2k = \frac{4}{k+1}

(2) 修正项:

  • k=1k=12s1=2212=21=2-2 s_1 = -2 \cdot \frac{2}{1 \cdot 2} = -2 \cdot 1 = -2
  • k=2k=2+2s2=+2223=+213=23+2 s_2 = +2 \cdot \frac{2}{2 \cdot 3} = +2 \cdot \frac{1}{3} = \frac{2}{3}
  • 其他 kk:修正项为 0

所以总和:

k=1nskck=k=1n4k+12[k=1]+2[k=2](仅在 k=1,2 处有额外修正)\sum_{k=1}^n s_k c_k = \sum_{k=1}^n \frac{4}{k+1} - 2[k=1] + 2[k=2] \quad \text{(仅在 } k=1,2 \text{ 处有额外修正)}

即:

k=1nskck=4k=1n1k+12δk1+2δk2=4k=1n1k+12+23(因为只在 k=1,2 发生)\sum_{k=1}^n s_k c_k = 4 \sum_{k=1}^n \frac{1}{k+1} - 2 \cdot \delta_{k1} + 2 \cdot \delta_{k2} = 4 \sum_{k=1}^n \frac{1}{k+1} - 2 + \frac{2}{3} \quad \text{(因为只在 } k=1,2 \text{ 发生)}

注意:求和中的修正项是固定的数值,不是对每个 kk 都加,而是当 k=1k=1 时减 2,k=2k=2 时加 23\frac{2}{3},所以总修正为:

2+23=43-2 + \frac{2}{3} = -\frac{4}{3}

因此:

k=1nskck=4k=1n1k+143\sum_{k=1}^n s_k c_k = 4 \sum_{k=1}^n \frac{1}{k+1} - \frac{4}{3}
Cn=n+12k=1nskck=n+12(4k=1n1k+143)=n+124(k=1n1k+113)C_n = \frac{n+1}{2} \sum_{k=1}^n s_k c_k = \frac{n+1}{2} \left( 4 \sum_{k=1}^n \frac{1}{k+1} - \frac{4}{3} \right) = \frac{n+1}{2} \cdot 4 \left( \sum_{k=1}^n \frac{1}{k+1} - \frac{1}{3} \right)
=2(n+1)(k=1n1k+113)=2(n+1)k=1n1k+123(n+1)= 2(n+1) \left( \sum_{k=1}^n \frac{1}{k+1} - \frac{1}{3} \right) = 2(n+1) \sum_{k=1}^n \frac{1}{k+1} - \frac{2}{3}(n+1)

最终结果

Cn=2(n+1)k=1n1k+123(n+1),n>1\boxed{ C_n = 2(n+1) \sum_{k=1}^n \frac{1}{k+1} - \frac{2}{3}(n+1), \quad n > 1 }

使用调和数计算最终结果

定义调和数:

Hn=1+12+13++1n=k=1n1k(2.13)H_n = 1 + \frac{1}{2} + \frac{1}{3} + \cdots + \frac{1}{n} = \sum_{k=1}^n \frac{1}{k} \tag{2.13}

将和式用调和数表示:

k=1n1k+1=Hn+11,其中 Hn+1=k=1n+11k\sum_{k=1}^n \frac{1}{k+1} = H_{n+1} - 1, \quad \text{其中 } H_{n+1} = \sum_{k=1}^{n+1} \frac{1}{k}

代入得:

Cn=2(n+1)(Hn+11)23(n+1)=2(n+1)(Hn+143)C_n = 2(n+1)(H_{n+1} - 1) - \frac{2}{3}(n+1) = 2(n+1) \left( H_{n+1} - \frac{4}{3} \right)

验证小值:

n=2n = 2: H3=1+12+13=116H_3 = 1 + \frac{1}{2} + \frac{1}{3} = \frac{11}{6}, C2=2(3)(11643)=6(11686)=636=3C_2 = 2(3)\left( \frac{11}{6} - \frac{4}{3} \right) = 6 \left( \frac{11}{6} - \frac{8}{6} \right) = 6 \cdot \frac{3}{6} = 3

n=3n = 3: H4=116+14=2512H_4 = \frac{11}{6} + \frac{1}{4} = \frac{25}{12}, C3=2(4)(251243)=8(25121612)=8912=6C_3 = 2(4)\left( \frac{25}{12} - \frac{4}{3} \right) = 8 \left( \frac{25}{12} - \frac{16}{12} \right) = 8 \cdot \frac{9}{12} = 6