《算法导论》笔记-附录A-求和

· · 算法·理论

本笔记由本人整理,难免出现错误之处,还请评论区的各位神犇指出 orz。

1. 求和公式及其性质

内容笔记

给定一个数列 a_m,a_{m+1},\cdots,a_n,定义

a_m+a_{m+1}+\cdots+a_n=\sum_{k=m}^n a_k

如果 m>n,则 \displaystyle \sum_{k=m}^n a_k=0

给定一个无限数列 a_m,a_{m+1},a_{m+2},\cdots,可以将其无限和 a_m+a_{m+1}+\cdots 表示为

\sum_{k=m}^\infty a_k=\lim_{n \to \infty} \sum_{k=m}^n a_k

线性性质

\sum_{k=m}^n(ca_k+b_k)=c\sum_{k=m}^n a_k+\sum_{k=m}^n b_k

注意:对于所有级数 \displaystyle \sum_{k=m}^{\infty}(ca_k+b_k),并不满足 \displaystyle \sum_{k=m}^{\infty}(ca_k+b_k)=\displaystyle c\sum_{k=m}^{\infty}a_k+\sum_{k=m}^{\infty}b_k,只当级数 \displaystyle\sum_{k=m}^{\infty}a_k\displaystyle\sum_{k=m}^{\infty}b_k 都收敛时才成立。

常见级数

\begin{align} & \sum_{k=1}^n k=\frac{n(n+1)}{2}&(\text{等差级数}) \\ & \sum_{k=0}^n k^2=\frac{n(n+1)(2n+1)}{6}&(\text{平方和}) \\ & \sum_{k=0}^n k^3=\frac{n^2(n+1)^2}{4}&(\text{立方和}) \\ & \sum_{k=0}^n x^k=\frac{x^{n+1}-1}{x-1}(x\not=1)&(\text{几何级数/指数级数}) \\ & \sum_{k=0}^{\infty} x^k=\frac{1}{1-x}(|x|<1)&(\text{无限递减几何级数}) \\ H_n=& \sum_{k=1}^n \frac 1 k=\ln n+O(1)&(\text{调和级数}) \end{align}

级数的微分和积分

对级数的两端进行微分或积分,可以得到新的级数公式。

例如,对 \displaystyle \sum_{k=0}^{\infty} x^k=\frac{1}{1-x} 的两端关于 x 微分,可得:

\begin{align} \frac{\mathrm d}{\mathrm dx}\sum_{k=0}^{\infty}x^k&=\frac{\mathrm d}{\mathrm dx}(\frac{1}{1-x})\\ \sum_{k=0}^{\infty} kx^{k-1}&=\frac{(1-x)(\frac{\mathrm d}{\mathrm dx}(1))-(1)(\frac{\mathrm d}{\mathrm dx}(1-x))}{(1-x)^2}\\ \sum_{k=0}^{\infty}kx^{k-1}&=\frac{1}{(1-x)^2} \end{align}

两边同乘 x,得

\sum_{k=0}^{\infty}kx^k=\frac{x}{(1-x)^2}

裂项级数

\begin{align} \sum_{k=1}^n (a_k-a_{k-1})&=a_n-a_{n-1}+a_{n-1}-a_{n-2}+\cdots+a_1-a_0 \\ &=a_n-a_0 \end{align}

同理可得:

\sum_{k=0}^{n-1} (a_k-a_{k+1})=a_0-a_n

以下是裂项和的一个例子:

\begin{align} \sum_{k=1}^{n-1} \frac{1}{k(k+1)}&=\sum_{k=1}^{n-1}(\frac{1}{k}-\frac{1}{k+1}) \\ &=\frac 1 1-\frac 1 n \\ &=1-\frac 1 n \end{align}

乘积

仿照级数的定义,我们可以把 a_ma_{m+1}\cdots a_n 写成

\prod_{k=m}^na_k

同理,定义当 m>n\displaystyle \prod_{k=m}^na_k=1

我们还可以得到它的一些性质:

\begin{align} \prod_{k=m}^n(ab)&=\prod_{k=m}^na\cdot\prod_{k=m}^nb \\ \prod_{k=m}^n\frac a b&=\frac{\displaystyle\prod_{k=m}^na}{\displaystyle\prod_{k=m}^nb} \\ \log_s(\prod_{k=m}^na_k)&=\sum_{k=m}^n\log_s(a_k) \end{align}

练习

1. 求 \displaystyle \sum_{k=1}^n(2k-1) 的简化形式。

\begin{align} \sum_{k=1}^n(2k-1)&=2\sum_{k=1}^nk-\sum_{k=1}^n1 \\ &=2 \cdot \frac{n(n-1)}{2}-n \\ &=n^2-n-n \\ &=n^2-2n \end{align}

2. 利用调和级数证明:\displaystyle\sum_{k=1}^n\frac{1}{2k-1}=\ln(\sqrt n)+O(1)

\begin{align} \sum_{k=1}^n\frac{1}{2k-1}&=\frac 1 1+\frac 1 3+\frac 1 5+\cdots+\frac 1 {2n-1} \\ &=\frac 1 1+\frac 1 2+\frac 1 3+\cdots+\frac 1 {2n}-\frac 1 2(\frac 1 1+\frac 1 2+\frac 1 3+\cdots+\frac 1 n) \\ &=\sum_{k=1}^{2n}\frac 1 k-\frac 1 2\sum_{k=1}^n \frac 1 k \\ &=\ln 2n+O(1)-\frac 1 2 \ln n+O(1) \\ &=\ln n+\ln 2+-\frac 1 2\ln n+O(1) \\ &=\frac 1 2 \ln n+O(1) \\ &=\ln \sqrt n+O(1) \end{align}

3. 证明:\displaystyle \sum_{k=0}^{\infty}k^2x^k=\frac{x(1+x)}{(1-x)^3}|x|<1 条件下成立。

\sum_{k=0}^{\infty}kx^k=\frac{x}{(1-x)^2}

在两端同时微分,得

\begin{align} \sum_{k=0}^{\infty}k^2x^{k-1}&=\frac{(1-x)^2(\frac{\mathrm d}{\mathrm dx}(x))-x(\frac{\mathrm d}{\mathrm dx}(1-x)^2)}{(1-x)^4}\\ &=\frac{(1-x)^2+2x(1-x)}{(1-x)^4}\\ &=\frac{1-x+2x}{(1-x)^3}\\ &=\frac{1+x}{(1-x)^3} \end{align}

两边同乘 x,可得

\sum_{k=0}^{\infty}k^2x^k=\frac{x(1+x)}{(1-x)^3}

4. 证明 \displaystyle \sum_{k=0}^{\infty}\frac{k-1}{2^k}=0

\begin{align} \sum_{k=0}^{\infty}\frac{k-1}{2^k}&=\sum_{k=0}^{\infty}(\frac 1 2)^k(k-1) \\ &=\sum_{k=0}^{\infty}k(\frac 1 2)^k-\sum_{k=0}^{\infty}(\frac 1 2)^k \\ &=\frac{(\frac 1 2)}{(1-\frac 1 2)^2}-\frac{1}{1-\frac 1 2} \\ &=\frac{(\frac 1 2)}{(\frac 1 4)}-\frac{1}{(\frac 1 2)} \\ &=2-2 \\ &=0 \end{align}

5. 对于 |x|>1,求 \displaystyle \sum_{k=1}^{\infty}(2k+1)x^{2k} 的值

\begin{align} \sum_{k=1}^{\infty}(2k+1)x^{2k}&=2\sum_{k=1}^{\infty}k(x^2)^k+\sum_{k=1}^{\infty}(x^2)^k \\ &=2 \cdot \frac{x^2}{(1-x^2)^2}+\frac{1}{1-x^2} \\ &=\frac{2x^2}{(1-x^2)^2}+\frac{1-x^2}{(1-x^2)^2} \\ &=\frac{1+x^2}{(1-x^2)^2} \end{align}

6. 用和的线性性质证明 \displaystyle \sum_{k=1}^nO(f_k(i))=O(\sum_{k=1}^nf_k(i))

注:这里本人是真不会了,在评论区向神犇求助

7. 计算乘积 \displaystyle\prod_{k=1}^n2\cdot4^k

\begin{align} \lg(\prod_{k=1}^n2\cdot4^k)&=\sum_{k=1}^n\lg(2\cdot4^k) \\ &=\sum_{k=1}^n\lg(2^{2k+1}) \\ &=\sum_{k=1}^n(2k+1) \\ &=2\sum_{k=1}^nk+\sum_{k=1}^n1 \\ &=n(n+1)+n \\ &=n^2+2n \end{align} \therefore \prod_{k=1}^n2\cdot4^k=2^{n^2+2n}

8. 计算乘积 \displaystyle\prod_{k=2}^n(1-\frac{1}{k^2})

\begin{align} \prod_{k=2}^n(1-\frac{1}{k^2})&=\prod_{k=2}^n\frac{k^2-1}{k^2} \\ &=\frac{\displaystyle\prod_{k=2}^n(k+1)(k-1)}{\displaystyle\prod_{k=2}^nk^2} \\ &=\frac{\displaystyle\prod_{k=2}^n(k+1)\prod_{k=2}^n(k-1)}{(n!)^2} \\ &=\frac{\frac{(n+1)!}{2}\cdot(n-1)!}{(n!)^2} \\ &=\frac{\frac{n+1}{2}\cdot n!\cdot n!\cdot\frac{1}{n}}{(n!)^2} \\ &=\frac{n+1}{2n} \end{align}

2. 确定求和时间的界

内容笔记

有些时候我们并不需要确定一个求和公式的具体值,只需要知道一个求和公式的界,尤其是在分析算法复杂度时。

数学归纳法

数学归纳法要满足两个条件:

如果能够满足这两个要求,从初始条件出发,一直归纳就可以证明每个数都满足假设。所以数学归纳法不仅可以证明级数的界,还可以证明级数的确切值。

下面给出一个例子:证明 \displaystyle \sum_{k=1}^n k=\frac{n(n+1)}{2}

首先对于初始条件 n=1,容易得到 \displaystyle \sum_{k=1}^1k=1=\frac{1\cdot2}{2};若假设对 n 成立,则对 n+1

\begin{align} \sum_{k=1}^{n+1}k&=\sum_{k=1}^nk+\sum_{k=n+1}^{n+1}k \\ &=\frac{n(n+1)}{2}+n+1 \\ &=\frac{n(n+1)}{2}+\frac{2(n+1)}{2} \\ &=\frac{(n+1)(n+2)}{2} \end{align}

所以假设对 n+1 也成立。

下面是一个证明上界的例子:证 \displaystyle \sum_{k=0}^n3^k=O(3^n),更确切地说,证明对于某个常数 c,有 \displaystyle \sum_{k=0}^n3^k\le c3^n

首先对于初始条件 n=0,有 \displaystyle \sum_{k=0}^03^k=1\le c\cdot1,只要满足 c \ge 1

接着对于一个满足假设的 n,对 n+1

\begin{align} \sum_{k=0}^{n+1}3^k&=\sum_{k=0}^n3^k+\sum_{k=n+1}^{n+1}3^k \\ &\le c3^n+3^{n+1}\\&=(\frac 1 3+\frac 1 c)c3^{n+1} \end{align}

只要 \frac 1 3+\frac 1 c\le1,即 c\ge\frac 3 2(与 c\ge1 不冲突),则有 (\frac 1 3+\frac 1 c)c3^{n+1}\le c3^{n+1},所以 \displaystyle\sum_{k=0}^{n+1}3^k\le c3^{n+1},于是就证明了 \displaystyle\sum_{k=1}^n3^k=O(3^n)

确定级数中各项的界

通常,对于级数 \displaystyle\sum_{k=1}^na_k,如果令 a_{\max}=\displaystyle\max_{1\le k\le n}a_k,则有

\sum_{k=1}^na_k\le\sum_{k=1}^na_{\max}=n\cdot a_{\max}

同理,令 a_{\min}=\displaystyle\min_{1\le k\le n}a_k,则有

\sum_{k=1}^na_k\ge\sum_{k=1}^na_{\min}=n\cdot a_{\min}

例如对于 \displaystyle\sum_{k=1}^nka_k=k,则 a_{\max}=n,所以可以得到一个上界:

\displaystyle\sum_{k=1}^nk\le\sum_{k=1}^nn=n^2

但这只能给出一个非常模糊的上界(大部分时候给出的是一个 o 上界,即不紧确的上界)。给定级数 \displaystyle\sum_{k=0}^na_k,假定对于所有 k\ge0,有 \frac{a_{k+1}}{a_k}\le r,其中 0<r<1 是常数。因为 a_k\le a_0r^k,我们可以用无限递减几何级数作为上界,所以有

\sum_{k=0}^na_k\le\sum_{k=0}^{\infty}a_0r^k=a_0\sum_{k=0}^{\infty}r^k=\frac{a_0}{1-r}

例如求 \displaystyle\sum_{k=1}^{\infty}\frac{k}{3^k} 的界,我们可以先变形成 \displaystyle\sum_{k=0}^{\infty}\frac{k+1}{3^{k+1}}。则相邻项的比值为

\frac{(\frac{k+2}{3^{k+2}})}{(\frac{k+1}{3^{k+1}})}=\frac 1 3\cdot \frac{k+2}{k+1}\le \frac 2 3

所以 r=\frac 2 3,并且 a_0=\frac 1 3,因此

\begin{align} \sum_{k=1}^{\infty}\frac{k}{3^k}&=\sum_{k=0}^{\infty}\frac{k+1}{3^{k+1}} \\ &\le\frac 1 3\sum_{k=0}^{\infty}(\frac 2 3)^k \\ &=\frac 1 3\cdot\frac{1}{1-\frac 2 3} \\ &=1 \end{align}

所以 \displaystyle\sum_{k=1}^{\infty}\frac{k}{3^k} 有上界 1

但是在使用这个方法时有一些注意点,比如求调和级数 \displaystyle\sum_{k=1}^n\frac 1 k,虽然 \displaystyle\frac{(\frac 1 {k+1})}{(\frac 1 k)}=\frac{k}{k+1}\le1,但是当 k\to\infty 时,有 \frac{k}{k+1}\to1,所以不存在一个 r 满足 \frac{k}{k+1}\le r 并且 0<r<1,所以这个级数是发散的。

分割求和

对于求和公式 \displaystyle\sum_{k=m}^na_k,若 m \le p<n,则

\sum_{k=m}^na_k=\sum_{k=m}^pa_k+\sum_{k=p+1}^na_k

例如对 \displaystyle\sum_{k=1}^nk,如果直接求下界,则有

\sum_{k=1}^nk\ge\sum_{k=1}^n1=n

所以等差级数有下界 \Omega(n),与上界 O(n^2) 相差甚远,所以不能得到紧确界 \Theta(n^2)

试图采用分割求和的方式:

\begin{align} \sum_{k=1}^nk&=\sum_{k=1}^{\lfloor \frac n 2\rfloor}k+\sum_{k=\lceil\frac n 2\rceil}^nk \\ &\ge\sum_{k=1}^{\lfloor\frac n 2\rfloor}1+\sum_{k=\lceil\frac n 2\rceil}^n\lceil\frac n 2\rceil \\ &\ge\frac n 2-1+\sum_{k=\lceil\frac n 2\rceil}^n\frac n 2 \\ &\ge\frac n 2-1+\frac n 2 \cdot \frac n 2 \\ &=\frac 1 4\cdot n^2+\frac 1 2\cdot n-1 \end{align}

所以有 \displaystyle\sum_{k=1}^nk=\Omega(n^2),于是就可以得到紧确界 \Theta(n^2)

在算法分析中可以忽略掉前面的常数项,只考虑后面的:

\begin{align} \sum_{k=m}^na_k&=\sum_{k=m}^{p-1}a_k+\sum_{k=p}^na_k \\ &=O(1)+\sum_{k=p}^na_k \end{align}

这一技巧同样适用于无限级数。例如,欲求

\sum_{k=0}^{\infty}\frac{k^2}{2^k}

的一个渐进上界。

相邻两项的比值为:

\frac{(\frac{(k+1)^2}{2^{k+1}})}{(\frac{k^2}{2^k})}=\frac{(k+1)^2}{2k^2}

k\ge3 时,\frac{(k+1)^2}{2k^2}\le\frac 8 9,于是我们可以裂项求和:

\begin{align} \sum_{k=0}^{\infty}\frac{k^2}{2^k}&=\sum_{k=0}^2\frac{k^2}{2^k}+\sum_{k=3}^{\infty}\frac{k^2}{2^k}\\ &=O(1)+\frac 9 8\sum_{k=3}^{\infty}(\frac 8 9)^k\\ &=O(1)+\frac 9 8\sum_{k=0}^{\infty}(\frac 8 9)^k-\frac 9 8\sum_{k=0}^2(\frac 8 9)^k\\ &=O(1)+\frac 9 8\sum_{k=0}^{\infty}(\frac 8 9)^k\\ &=O(1) \end{align}

分割求和法可以帮助我们确定更难的和式的值,例如确定调和级数的紧确界:

\begin{align} \sum_{k=1}^n\frac1k&\le\sum_{i=0}^{\lfloor \lg n \rfloor}\sum_{j=0}^{2^i-1}\frac 1{2^i+j}\\ &\le\sum_{i=0}^{\lfloor\lg n\rfloor}\sum_{j=0}^{2^i-1}\frac 1{2^i}\\ &=\sum_{i=0}^{\lfloor \lg n \rfloor}1\\ &=\lfloor\lg n\rfloor\\ &\le\lg n+1 \end{align}

所以 \displaystyle\sum_{k=1}^n\frac 1 k=O(\lg n)

通过积分求和的近似

对于一个和式 \displaystyle\sum_{k=m}^nf(k),其中 f 是单调函数(只要在区间 [m-1,n+1] 是单调函数就行),那么就可以用积分来确定和式的近似值。

具体地说,当 f 是单调递增函数时,有

\int_{m-1}^nf(x)\mathrm dx\le \sum_{k=m}^nf(k)\le\int_{m}^{n+1}f(x)\mathrm dx

先看下限,因为 f 是单调递增函数,区间[i-1,i]中的最大值为 f(i),于是 \displaystyle{\int_{i-1}^if(x)\mathrm dx}\le f(i),对于每个 i\in[m,n] 都满足这个式子,就满足 \displaystyle{\int_{m-1}^nf(x)}\mathrm dx\le\sum_{k=m}^nf(k)。同理可得 \displaystyle{\sum_{k=m}^nf(k)\le\int_{m}^{n+1}f(x)\mathrm dx}

f 是单调递减函数时,有

\int_{m}^{n+1}f(x)\mathrm dx\le\sum_{k=m}^nf(k)\le\int_{m-1}^nf(x)\mathrm dx

证明方法也差不多,这里就不过多赘述了。

积分近似公式也可以为调和级数提供一个紧确界。因为 f(x)=\frac 1 x 是一个单调递减函数。对于其下界,可得

\begin{align} \sum_{k=1}^n\frac 1 k&\ge\int_{1}^{n+1}\frac 1 x\mathrm dx\\ &=\ln(n+1) \end{align}

对于上界,有

\begin{align} \sum_{k=1}^n\frac 1 k&=\sum_{k=1}^1\frac 1 k+\sum_{k=2}^n\frac 1 k\\ &=1+\sum_{k=2}^n\frac 1 k \end{align}

其中

\begin{align} \displaystyle\sum_{k=2}^n\frac 1 k&\le\int_1^n\frac 1 x\mathrm dx\\ &=\ln n \end{align}

所以

\sum_{k=1}^n\frac 1 k\le\ln n+1

加上下界,可得

\ln(n+1)\le \sum_{k=1}^n\frac 1 k\le\ln n+1

所以可以得到调和级数的紧确界 \Theta(\ln n)

练习

1. 证明:\displaystyle\sum_{k=1}^n\frac 1{k^2} 有常数上界。

因为 f(x)=\frac 1{x^2} 是一个单调递减的函数,所以可以运用积分近似法:

\begin{align} \sum_{k=1}^n\frac{1}{k^2}&=\sum_{k=1}^1\frac{1}{k^2}+\sum_{k=2}^n\frac{1}{k^2}\\ &=1+\sum_{k=2}^n\frac{1}{k^2} \end{align}

其中

\begin{align} \sum_{k=2}^n\frac{1}{k^2}&\le\int_{1}^n\frac{1}{x^2}\mathrm dx\\ &=1-\frac 1 n\\ &\le1 \end{align}

所以

\sum_{k=1}^n\frac{1}{k^2}\le1+1=2

于是就证明了 \displaystyle\sum_{k=1}^n\frac{1}{k^2}=O(1)

2. 求下面一个和式的一个渐进上界:\displaystyle\sum_{k=0}^{\lfloor\lg n\rfloor}\lceil\frac{n}{2^k}\rceil

\begin{align} \sum_{k=0}^{\lfloor\lg n\rfloor}\lceil\frac{n}{2^k}\rceil&\le\sum_{k=0}^{\lfloor\lg n\rfloor}(\frac{n}{2^k}+1)\\ &=n\sum_{k=0}^{\lfloor\lg n\rfloor}\frac{1}{2^k}+\lfloor\lg n\rfloor+1\\ &\le 2n+\lfloor\lg n\rfloor+1 \end{align}

于是 \displaystyle\sum_{k=0}^{\lfloor\lg n\rfloor}\lceil\frac{n}{2^k}\rceil=O(n)

3. 通过分割求和的方式证明第 n 个调和数是 \Omega(\lg n)

\begin{align} \sum_{k=1}^n\frac 1 k&\ge\sum_{i=0}^{\lfloor\lg n\rfloor-1}\sum_{j=0}^{2^i-1}\frac 1{2^i+j}\\ &\ge\sum_{i=0}^{\lfloor\lg n\rfloor-1}\sum_{j=0}^{2^i-1}\frac 1{2^{i+1}}\\ &=\sum_{i=0}^{\lfloor\lg n\rfloor-1}\frac 1 2\\ &=\frac 1 2\lfloor\lg n\rfloor\\ &\ge\frac 1 2\lg n-\frac 1 2 \end{align}

所以就证明了 \displaystyle\sum_{k=1}^n\frac 1 k=\Omega(\lg n)

4. 用积分方法求 \displaystyle\sum_{k=1}^nk^3 的近似值。

因为 f(x)=x^3 是单调递增函数,所以有

\begin{align} \int_{0}^nx^3\mathrm dx\le&\sum_{k=1}^nk^3\le\int_{1}^{n+1}x^3\mathrm dx\\ \frac 1 4\cdot x^4\le&\sum_{k=1}^nk^3\le\frac 1 4\cdot(x+1)^4-\frac14 \end{align}

5. 为什么我们不在 \displaystyle\sum_{k=1}^n\frac1k 上使用积分近似来获得第 n 个调和数的上界?

如果直接使用积分近似公式,会得到

\sum_{k=1}^n\frac1k\le\int_{0}^n\frac1x\mathrm dx=\lim_{m\to0}(\ln n-\ln m)=\infty

这个上界是没有意义的(有了跟没有一样,如有)。

思考题

1. 请给出下面和式的渐进紧确界。假设 r\ge0s\ge0 均为常数。

a. \displaystyle\sum_{k=1}^nk^r

因为 f(x)=x^r 是单调递增函数,所以可以用积分近似法:

\begin{align} \int_{0}^nx^r\mathrm dx\le&\sum_{k=1}^nk^r\le\int_{1}^{n+1}x^rdx \\ \frac{n^{r+1}}{r+1}\le&\sum_{k=1}^nk^r\le\frac{(n+1)^{r+1}}{r+1}-\frac{1}{r+1} \end{align}

又因为 r 是常数,所以有 \displaystyle\sum_{k=1}^nk^r=\Theta(n^{r+1})

b. \displaystyle\sum_{k=1}^n\lg^sk

\begin{align} \sum_{k=1}^n\lg^sk&\le\sum_{k=1}^n\lg^sn\\ &=n\lg^sn \end{align}

所以 \displaystyle\sum_{k=1}^n\lg^sk=O(n\lg^sn)

\begin{align} \sum_{k=1}^n\lg^sk&\ge\sum_{i=0}^{\lfloor\lg n\rfloor-1}\sum_{j=0}^{2^i-1}\lg^s(2^i+j)\\ &\ge\sum_{i=0}^{\lfloor\lg n\rfloor-1}\sum_{j=0}^{2^i-1}\lg^s(2^i)\\ &=\sum_{i=0}^{\lfloor\lg n\rfloor-1}i^s2^i\\ &=\sum_{i=0}^{\lfloor\frac{\lg n}{2}\rfloor}i^s2^i+\sum_{i=\lfloor\frac{\lg n}{2}\rfloor+1}^{\lfloor\lg n\rfloor-1}i^s2^i\\ &\ge\sum_{i=\lfloor\frac{\lg n}{2}\rfloor+1}^{\lfloor\lg n\rfloor-1}(\lfloor\frac{\lg n}{2}\rfloor)^s2^{i}\\ &=(\lfloor\frac{\lg n}{2}\rfloor)^s\sum_{i=\lfloor\frac{\lg n}{2}\rfloor+1}^{\lfloor\lg n\rfloor-1}2^i\\ &=(\lfloor\frac{\lg n}{2}\rfloor)^s(2^{\lfloor\lg n\rfloor+1}-1-2^{\lfloor\frac{\lg n}{2}\rfloor+1}+1)\\ &\ge(\frac{\lg n}{2}-1)^s(2^{\lg n}-2^{\frac{\lg n}{2}})\\ &=(\frac{\lg n}{2}-1)^s(n-\sqrt{n})\\ &\ge(\frac12)^s(\lg n-2)^s(n-\sqrt n) \end{align}

因为 s 是常数,所以 \displaystyle\sum_{k=1}^n\lg^sk=\Omega(n\lg^sn),结合上界,可以得到

\sum_{k=1}^n\lg^sk=\Theta(n\lg^sn)

c. \displaystyle\sum_{k=1}^nk^r\lg^sk

\begin{align} \sum_{k=1}^nk^r\lg^sk&\le\sum_{k=1}^nn^r\lg^sn\\ &=n^{r+1}\lg^sn \end{align}

所以 \displaystyle\sum_{k=1}^nk^r\lg^sk=O(n^{r+1}\lg^sn)

\begin{align} \sum_{k=1}^nk^r\lg^sk&\ge\sum_{i=0}^{\lfloor\lg n\rfloor-1}\sum_{j=0}^{2^i-1}(2^i+j)^r\lg^s(2^i+j)\\ &\ge\sum_{i=0}^{\lfloor\lg n\rfloor-1}\sum_{j=0}^{2^i-1}(2^i)^r\lg^s(2^i)\\ &=\sum_{i=0}^{\lfloor\lg n\rfloor-1}\sum_{j=0}^{2^i-1}2^{ir}i^s\\ &=\sum_{i=0}^{\lfloor\lg n\rfloor-1}2^{i(r+1)}i^s\\ &=\sum_{i=0}^{\lfloor\frac{\lg n}{2}\rfloor}2^{i(r+1)}i^s+\sum_{i=\lfloor\frac{\lg n}{2}\rfloor+1}^{\lfloor\lg n\rfloor}2^{i(r+1)}i^s\\ &\ge\sum_{i=0}^{\lfloor\frac{\lg n}{2}\rfloor}2^{0(r+1)}0^s+\sum_{i=\lfloor\frac{\lg n}{2}\rfloor+1}^{\lfloor\lg n\rfloor}2^{i(r+1)}(\lfloor\frac{\lg n}{2}\rfloor+1)^s\\ &\ge\sum_{i=\lfloor\frac{\lg n}{2}\rfloor+1}^{\lfloor\lg n\rfloor}2^{i(r+1)}(\frac{\lg n}{2})^s\\ &\ge\frac{1}{2^s}\lg^sn\sum_{i=\lfloor\frac{\lg n}{2}\rfloor+1}^{\lfloor\lg n\rfloor}(2^{r+1})^i\\ &=\frac{1}{2^s}\lg^sn(\frac{(2^{r+1})^{\lfloor\lg n\rfloor}-1}{2^{r+1}-1}-\frac{(2^{r+1})^{\lfloor\frac{\lg n}{2}\rfloor}-1}{2^{r+1}-1})\\ &\ge\frac{1}{2^{s+1}(2^{r+1}-1)}\lg^sn((2^{\lg n})^{r+1}-1-(2^{\frac{\lg n}{2}})^{r+1}+1)\\ &=\frac{1}{2^{s+1}(2^{r+1}-1)}\lg^sn(n^{r+1}-n^{\frac{r+1}{2}}) \end{align}

因为 rs 都为常数,所以 \displaystyle\sum_{k=1}^nk^r\lg^sk=\Omega(n^{r+1}\lg^sn)。结合上界可得

\sum_{k=1}^nk^r\lg^sk=\Theta(n^{r+1}\lg^sn)