《具体数学》阅读笔记

《具体数学》阅读笔记

1. 常见化简技巧

1.1. 基数变换

形如

\[\begin{aligned} &f(j)=\alpha_j,&&1\le j\le d;\\ &f(dn+j)=cf(n)+\beta_j,&&0\le j\le d,n\ge 1 \end{aligned} \]

的函数 \(f\),我们尝试将参数写成进制的形式,即 \(n=(b_mb_{m-1}\cdots b_1b_0)_d\),则我们可以推出

\[\begin{aligned} f(n)&=f((b_mb_{m-1}\cdots b_1b_0)_d)\\&=cf((b_mb_{m-1}\cdots b_1)_d)+\beta_{b_0}\\&=c^2f((b_mb_{m-1}\cdots)_d)+c\beta_{b_1}+\beta_{b_0}\\&\cdots\\&=c^m\alpha_{b_m}+c^{m-1}\beta_{b_{m-1}}+\cdots+c\beta_{b_1}+\beta_{b_0}\\&=(\alpha_{b_m}\beta_{b_{m-1}}\cdots\beta_{b_1}\beta_{b_0})_c. \end{aligned} \]

于是我们得到了最终的结论:

\[f((b_mb_{m-1}\cdots b_1b_0)_d)=(\alpha_{b_m}\beta_{b_{m-1}}\cdots\beta_{b_1}\beta_{b_0})_c.\tag{1.1} \]

注意这里的答案对应的 \(c\) 进制是广义的,本质上采用的是倒数第二行的计算方式,只是可以简单写成进制的形式。

练习:

已知函数 \(f\) 的递归式

\[\begin{aligned} &f(1)=34;\\ &f(2)=5;\\ &f(3n)=10f(n)+76,&&n\ge 1;\\ &f(3n+1)=10f(n)-2,&&n\ge 1;\\ &f(3n+2)=10f(n)+8,&&n\ge 1. \end{aligned} \]

\(f(19)\) 的值.

根据 \((1.1)\)

\[\begin{aligned}f(19)&=f((201)_3)\\&=(5~~76~~{-2})_{10}\\&=1258.\end{aligned} \]

1.2. 待定系数法

形如

\[\begin{aligned} &f(0)=\alpha;\\ &f(n)=f(n-1)+\beta n+\gamma,&&n>0. \end{aligned} \]

的函数 \(f\)(事实上第二个式子中的后半部分的形式可以是多样的),我们可以猜出其应该与 \(\alpha,\beta,\gamma\) 有一些关系,于是我们考虑将这些参数对答案的贡献设成函数,即我们认为

\[f(n)=A(n)\alpha+B(n)\beta+C(n)\gamma.\tag{1.2} \]

接着,我们进行一步创造性的尝试:因为 \(A(n),B(n),C(n)\) 应当是固定的,所以我们将 \(f\) 视作参数,考虑对于不同的 \(f\) 求出成立的 \(\alpha,\beta,\gamma\),从而得出 \(A(n),B(n),C(n)\) 的关系式。具体来讲,对于一个 \(n\) 个参数的递归式,我们一般需要代入 \(n\) 个不同的 \(f\)

例如对于举出的问题,我们代入 \(f(n)=1\),从而得到

\[\left\{\begin{aligned}&\alpha=1;\\&\beta=0;\\&\gamma=0\end{aligned} \right.\Rightarrow A(n)=1. \]

代入 \(f(n)=n\),从而得到

\[\left\{\begin{aligned}&\alpha=0;\\&\beta=0;\\&\gamma=1\end{aligned} \right.\Rightarrow C(n)=n. \]

最后代入 \(f(n)=n^2\),从而得到

\[\left\{\begin{aligned}&\alpha=0;\\&\beta=2;\\&\gamma=-1\end{aligned} \right.\Rightarrow 2B(n)-C(n)=n^2.\Rightarrow B(n)=\frac{n^2+n}{2}. \]

从而我们得到了最终的结论:

\[f(n)=\alpha+\beta\frac{n^2+n}{2}+\gamma n. \]

当然脑洞大开一些,你也可以利用基数变换,将对应的内容代入从而得到结果。

练习:

已知函数 \(f\) 的递归式

\[\begin{aligned} &f(1)=5;\\ &f(2n)=4f(n)-7n-3,&&n\ge 1;\\ &f(2n+1)=4f(n)+11,&&n\ge 1. \end{aligned} \]

\(f(23)\) 的值。

我们可以先尝试将式子化成更一般的形式,即

\[\begin{aligned} &f(1)=\alpha;\\ &f(2n)=4f(n)+\beta_0n+\gamma_0,&&n\ge1;\\ &f(2n+1)=4f(n)+\beta_1n+\gamma_1,&&n\ge 1. \end{aligned} \]

于是我们可以开始考虑待定系数,考虑根据 \((1.2)\)

\[f(n)=A(n)\alpha+B_0(n)\beta_0+B_1(n)\beta_1+C_0(n)\gamma_0+C_1(n)\gamma_1. \]

这看起来是个大工程,我们先代入 \(f(n)=n\),从而得到

\[\left\{\begin{aligned}&\alpha=\gamma_1=1;\\&\beta_0=\beta_1=-2;\\&\gamma_0=0.\end{aligned}\right.\Rightarrow A(n)-2B_0(n)-2B_1(n)+C_1(n)=n. \]

然后是 \(f(n)=n^2\),这会让我们得到

\[\left\{\begin{aligned}&\alpha=\gamma_1=1;\\&\beta_0=\gamma_0=0;\\&\beta_1=4.\end{aligned}\right.\Rightarrow A(n)+4B_1(n)+C_1(n)=n^2. \]

以上这些都并不难得到,然而我们貌似很难得到新的信息了,因为没有一些其他的函数能够给我们额外的信息(或者你可以代入 \(f(n)=1\),你会得到 \(A(n)-3C_0(n)-3C_1(n)=1\),可惜这对我们解出整个系数方程组没有帮助)。观察到我们得到的递归式的形式与上面提到的基数变换的形式很像,我们可以代入 \(f((1b_{m-1}\cdots b_1b_0)_2)=(\alpha\gamma_{b_{m-1}}\cdots\gamma_{b_1}\gamma_{b_0})_4\),不难得到

\[\beta_0=\beta_1=0\Rightarrow A(n)\alpha+C_0(n)\gamma_0+C_1(n)\gamma_1=(\alpha\gamma_{b_{m-1}}\cdots\gamma_{b_1}\gamma_{b_0})_4. \]

看似这个式子毫无作用,这是因为我们在一般形式下难以用确切的数学符号将 \(A(n),C_0(n),C_1(n)\) 表示出来,然而通过这个式子,我们确切的知道这三个函数的值,只需要将其带回到上面的式子就可以解出整个方程组。

对于 \(n=23=(10111)_2\),我们推断出

\[A(23)\alpha+C_0(23)\gamma_0+C_1(23)\gamma_1=(\alpha\gamma_0\gamma_1\gamma_1\gamma_1)_4\Rightarrow\left\{\begin{aligned}&A(23)=256;\\&C_0(23)=64;\\&C_1(23)=21.\end{aligned}\right. \]

我们还有

\[\begin{aligned}&A(23)+4B_1(23)+C_1(23)=23^2\Rightarrow B_1(23)=63.\\ &A(23)-2B_0(23)-2B_1(23)+C_1(23)=23\Rightarrow B_0(23)=64.\end{aligned} \]

于是我们得到了

\[f(23)=256\alpha+64\beta_0+63\beta_1+64\gamma_0+21\gamma_1. \]

回到我们最初的式子,我们有

\[\left\{\begin{aligned}&\alpha=5;\\&\beta_0=-7;\\&\beta_1=0;\\&\gamma_0=-3;\\&\gamma_1=11.\end{aligned}\right.\Rightarrow f(23)=256\times 5-64\times 7-64\times 3+21\times 11=871. \]

1.3. 和式和递归式

如果细心一点,应该能够发现形如

\[f(n)=\sum_{k=0}^{n}w(n) \]

的函数 \(f\),其等价于

\[\begin{aligned} &f(0)=w(0);\\ &f(n)=f(n-1)+w(n),&&n>0. \end{aligned} \]

从而我们可能利用和式的求和法来完成整个递归式的求解。

1.3.1. 求和因子

对于形如

\[a_nf(n)=b_nf(n-1)+c_n \]

的函数 \(f\),我们想找到一个对应的求和因子 \(s_n\),使得 \(s_nb_n=s_{n-1}a_{n-1}\),将两边同乘 \(s_n\) 后,我们得到

\[\begin{aligned} s_na_nf(n)&=s_nb_nf(n-1)+s_nc_n\\&=s_{n-1}a_{n-1}f(n-1)+s_nc_n. \end{aligned} \]

此时令 \(g(n)=s_na_nf(n)\),那么有

\[g(n)=g(n-1)+s_nc_n. \]

从而

\[g(n)=s_0a_0f(0)+\sum_{k=1}^{n}s_kc_k=s_1b_1f(0)+\sum_{k=1}^{n}s_kc_k. \]

而原来的递归式的解就是

\[f(n)=\frac{1}{s_na_n}(s_1b_1T_0+\sum_{k=1}^{n}s_kc_k).\tag{1.3.1} \]

然而,我们看起来需要有足够的智慧才能求得 \(s_n\)。然而我们利用 \(s_nb_n=s_{n-1}a_{n-1}\),将其展开,就可以得到

\[s_n=\frac{a_{n-1}a_{n-2}\cdots a_1}{b_nb_{n-1}\cdots b_2}. \]

这个分式的适当的任何常数倍也可以做这些事情,这看起来并不需要我们有一些脑子,然而除数不能为 \(0\),所以只要 \(a_n,b_n\) 永远不为 \(0\),求和因子就能一直奏效。

练习:

已知函数 \(f\) 的递归式

\[\begin{aligned} &f(0)=f(1)=0;\\ &f(n)=n+1+\frac{2}{n}\sum_{k=0}^{n-1}f(k),&&n>1. \end{aligned} \]

求解函数 \(f\) 的封闭形式。

看起来函数 \(f\) 相对比较复杂,我们想让它呈现上述的形式,我们可以作如下操作。现对两边同时乘 \(n\),得到

\[\begin{aligned}nf(n)=n^2+n+2\sum_{k=0}^{n-1}f(k),&&n>1.\end{aligned} \]

于是我们去掉了除法,接着我们去掉求和,用 \(n-1\) 代替 \(n\)

\[\begin{aligned}(n-1)f(n-1)=(n-1)^2+(n-1)+2\sum_{k=0}^{n-2}f(k),&&n-1>1.\end{aligned} \]

现在可以从第一个式子中减去第二个式子,求和号就消失了:

\[\begin{aligned}nf(n)-(n-1)f(n-1)=2n+2f(n-1),&&n>2.\end{aligned} \]

这样一来,我们可以将原来的递归式换成一个简单得多的递归式:

\[\begin{aligned} &f(0)=f(1)=0,f(2)=3;\\ &nf(n)=(n+1)f(n-1)+2n,&&n>2. \end{aligned} \]

从而我们有普通的 \(a_n=n,b_n=n+1\),且

\[c_n=2n-2[n=1]+2[n=2]. \]

故我们现在可以采用求和因子法,我们要用

\[s_n=\frac{a_{n-1}a_{n-2}\cdots a_1}{b_nb_{n-1}\cdots b_2}=\frac{(n-1)\times(n-2)\times\cdots\times1}{(n+1)\times n\times\cdots\times 3}=\frac{2}{(n+1)n} \]

的某个倍数。从而根据 \((1.3.1)\),我们有

\[\begin{aligned} f(n)&=\frac{n+1}{2}\sum_{k=1}^{n}\frac{2}{k(k+1)}(2k-2[k=1]+2[k=2])\\&=2(n+1)\sum_{k=1}^{n}\frac{1}{k+1}-\frac{2}{3}(n+1),&& n>1. \end{aligned} \]

最后出现的式子我们有一个特殊的名称和特别的记号:

\[H_n=\frac{1}{1}+\frac{1}{2}+\cdots+\frac{1}{n}=\sum_{k=1}^{n}\frac{1}{k}. \]

\(H_n\) 称为一个调和数。我们可以尝试用 \(H_n\) 来继续表示 \(f(n)\),这是不难的,因为我们有

\[\begin{aligned} \sum_{k=1}^{n}\frac{1}{k+1}&=\sum_{k=2}^{n+1}\frac{1}{k}\\&=(\sum_{k=1}^{n}\frac{1}{k})-\frac{1}{1}+\frac{1}{n+1}\\&=H_n-\frac{n}{n+1}. \end{aligned} \]

于是我们得到最终的结论:

\[\begin{aligned}f(n)=2(n+1)H_n-\frac{8}{3}n-\frac{2}{3},&& n>1.\end{aligned} \]

事实上,上面的函数 \(f\) 是快速排序对 \(n\) 个数排序时作比较的平均次数。我们用这个式子验证一些小情形不难发现其是正确的:\(f(2)=3,f(3)=6\)

1.3.2 扰动法

对于形如

\[S_n=\sum_{0\le k\le n}a_k \]

的和式,通过将它的最后一项和第一项分离出来,用两种方法重新改写 \(S_{n+1}\):

\[\begin{align} S_n+a_{n+1}&=\sum_{0\le k\le n+1}a_k\notag\\&=a_0+\sum_{1\le k\le n+1}a_k\notag\\&=a_0+\sum_{0\le k\le n}a_{k+1}.\tag{1.3.2} \end{align} \]

接下来我们可以对最后那个和式加以处理,并尝试用 \(S_n\) 将它表示出来,如果取得成功,我们就得到一个方程,它的解就是我们所求的和式。

练习:

已知和式

\[S_n=\sum_{0\le k\le n}k2^k. \]

求解 \(S_n\) 的封闭形式。

尝试扰动法,根据 \((1.3.2)\)

\[\begin{aligned} S_n+(n+1)2^{n+1}=\sum_{0\le k\le n}(k+1)2^{k+1}. \end{aligned} \]

所以我们想用 \(S_n\) 表示右边的等式,于是我们借助结合律将它分成两个和式

\[\sum_{0\le k\le n}k2^{k+1}+\sum_{0\le k\le n}2^{k+1}. \]

这两个和式中的第一个等于 \(2S_n\)。第二个和式是几何级数,大家都知道答案为 \(2^{n+2}-2\)。于是我们有

\[\begin{aligned} S_n+(n+1)2^{n+1}=2S_n+2^{n+2}-2 \end{aligned}. \]

通过计算我们得到最终的结论:

\[S_n=(n-1)2^{n-1}+2 \]

1.3.3 巧用定律与法则

对于和式来说,我们有定律和法则,具体来说,对于一个有限整数集合 \(K\),我们有

\[\begin{align} &\sum_{k\in K}ca_k=c\sum_{k\in K}a_k;&&(分配律)\tag{1.3.3.1}\\ &\sum_{k\in K}(a_k+b_k)=\sum_{k\in K}a_k+\sum_{k\in K}b_k;&&(结合律)\tag{1.3.3.2}\\ &\sum_{k\in K}a_k=\sum_{p(k)\in K}a_{p(k)}.&&(交换律)\tag{1.3.3.3} \end{align} \]

尽管现在给出的定义与其他地方的定义不甚相同,但我们就暂且这么用下去。这里的 \(p(k)\) 是所有整数集合的任意一个排列,然而我们可以将排列限制稍微放松一点:我们只要求当 \(n\in K\) 时,恰有一个 \(k\) 满足 \(p(k)=n\);否则,不管 \(p(k)=n\) 以怎样的频率出现都无关紧要。

艾弗森括号是一个伟大的思想。这一思想通过把一个命题放在括号中,如果命题为真,其结果是 \(1\),否则为 \(0\)。并且我们还有约定,当命题为假时,我们认为 \([P(k)]\) 必然为 \(0\),即使对无意义的 \(a_k\) 来说,\(a_k[P(k)]\) 依旧等于 \(0\),这个约定能够帮助我们规避许多困难。并且结合上面的定律,我们貌似还有一些其他的公式:

\[\sum_{P(k)}a_k=\sum_{k}a_k[P(k)].\tag{1.3.3.4} \]

毫无疑问的,这个公式可以拓展到二个变量,甚至到 \(n\) 个变量。结合上方的交换律,我们可以简单推得,如果对于命题 \(P_1(k),P_2(k),P_3(k),P_4(k)\),满足 \([P_1(k)]+[P_2(k)]=[P_3(k)]+[P_4(k)]\),那么我们显然有

\[\sum_{P_1(k)}a_k+\sum_{P_2(k)}a_k=\sum_{P_3(k)}a_k+\sum_{P_4(k)}a_k.\tag{1.3.3.5} \]

有一些常用的例子,比如通过

\[[k\in K]+[k\in K']=[k\in K\cap K']+[k\in K\cup K'] \]

我们能够写成

\[\sum_{k\in K}a_k+\sum_{k\in K'}a_k=\sum_{k\in K\cap K'}a_k+\sum_{k\in K\cup K'}a_k \]

的形式。仔细回忆扰动法的公式 \((1.3.2)\),不难看出扰动法利用了这一法则。

接着我们说多重和式。对于多重和式来说,即形如

\[\sum_{j,k}a_{j,k}=\sum_{j}\sum_{k}a_{j,k} \]

的和式,其就是

\[\sum_{j}(\sum_{k}a_{j,k}) \]

的缩写,也就是说,多重和式的运算顺序是从右到左(从内向外)的。在这一方面,我们有一个交换求和次序的基本法则,它推广了我们的结合律 \((1.3.3.2)\)

\[\sum_{j}\sum_{k}a_{j,k}[P(j,k)]=\sum_{P(j,k)}a_{j,k}=\sum_{k}\sum_{j}a_{j,k}[P(j,k)].\tag{1.3.3.6} \]

中间的这一项是对两个指标求和的和式。在左边,\(\sum_j\sum_k\) 表示我们先对 \(k\) 求和,然后对 \(j\) 求和。而在右边,\(\sum_k\sum_j\) 表示我们先对 \(j\) 求和,再对 \(k\) 求和。事实上,当我们想用封闭形式计算出一个二重和式时,通常先对一个指标求和会比先对另一个指标求和更容易些,所以我们要选择更加方便的求和顺序。

同时利用二重和式,我们可以将分配律 \((1.3.3.1)\) 推广到一般分配律

\[\sum_{j\in J,k\in K}a_jb_k=(\sum_{j\in J}a_j)(\sum_{k\in K}b_k).\tag{1.3.3.7} \]

然后我们回过头来,对于交换求和次序的基本法则再次进行一些变形,具体的我们可以将它分为简易型和复杂型。

\[\begin{align} &\sum_{j\in J}\sum_{k\in K}a_{j,k}=\sum_{j\in J,k\in K}a_{j,k}=\sum_{k\in K}\sum_{j\in J}a_{j,k};&&(简易型)\tag{1.3.3.8}\\ &\sum_{j\in J}\sum_{k\in K(j)}a_{j,k}=\sum_{k\in K'}\sum_{j\in J'(k)}a_{j,k}.&&(复杂型)\tag{1.3.3.9} \end{align} \]

事实上,简易型恰好是 \((1.3.3.5)\) 的另一种写法,因为艾弗森的 \([j\in J,k\in K]\) 分解成了 \([j\in J][k\in K]\),这适用于 \(j,k\) 的范围互相无关时使用。

而复杂型相应的更有技巧一些,它适用于内和的范围与外和的指标变量有关的情形。并且式子中的 \(J,K(j),K',J'(k)\) 必须以下面的方式相关联:

\[[j\in J][k\in K(j)]=[k\in K'][j\in J'(k)]. \]

原则上,这样的因子总是可能的:我们可以令 \(J=K'\) 是全体整数的集合,而 \(K(j),J'(k)\) 是用来操控二重和式性质 \(P(j,k)\) 的集合。尽管如此,我们依然有一些重要的特殊情形,在其中 \(J,K(j),K',J'(k)\) 都有简单的形式,它们频繁出现在应用中。例如

\[[1\le j\le n][j\le k\le n]=[1\le j\le k\le n]=[1\le k\le n][1\le j\le k] \]

就是一个很好的分解,这允许我们写成

\[\sum_{j=1}^{n}\sum_{k=j}^{n}a_{j,k}=\sum_{1\le j\le k\le n}a_{j,k}=\sum_{k=1}^{n}\sum_{j=1}^{k}a_{j,k} \]

的形式。

posted @ 2024-12-30 22:05  DycIsMyName  阅读(120)  评论(0)    收藏  举报