杜教筛复杂度证明

本文深入探讨了递归函数的时间复杂度分析方法,通过数学推导详细解释了一个特定递归公式的时间复杂度如何从O(n)优化到O(n^2/3),并讨论了预处理技术如何进一步降低计算成本。

我们实际上求的是这玩意

T(n)=n+∑i=1n(T(i)+T(ni))T(n)=\sqrt{n}+\sum_{i=1}^{\sqrt{n}}(T(i)+T(\frac{n}{i}))T(n)=n+i=1n(T(i)+T(in))

我们只需要考虑
T(n)=n+∑i=1n(i+ni)T(n)=\sqrt{n}+\sum_{i=1}^{\sqrt{n}}(\sqrt i+\sqrt\frac{n}{i})T(n)=n+i=1n(i+in)
对于之后的项,如

T(n)=n14+∑i=1n14(i+ni)T(\sqrt n)=n^{1\over4}+\sum_{i=1}^{n^{1\over4}}(\sqrt i+\sqrt\frac{\sqrt n}{i})T(n)=n41+i=1n41(i+in)
只有O(n14)O(n^{1\over4})O(n41),n\sqrt{n}n个加起来也就O(n34)O(n^{3\over4})O(n43)

我们要求的实际上是

∑i=1n(i+ni)\sum_{i=1}^{\sqrt{n}}(\sqrt i+\sqrt\frac{n}{i})i=1n(i+in)

前者明显小于后者,可以忽略

∑i=1nni\sum_{i=1}^{\sqrt{n}}\sqrt\frac{n}{i}i=1nin

当积分算

∫0nnx\int_{0}^{\sqrt{n}}\sqrt\frac{n}{x}0nxn

为了方便后面叙述,我们设一个通式,即

S(m)=∫0mnxS(m)=\int_{0}^{m}\sqrt\frac{n}{x}S(m)=0mxn

g(x)=nxg(x)=\sqrt\frac{n}{x}g(x)=xn

运用你丰富的数学知识,得到原函数

f(x)=nxf(x)=\sqrt{nx}f(x)=nx

所以所求为

S(n)=f(n)=n34S(\sqrt n)=f(\sqrt n)=n^{3 \over 4}S(n)=f(n)=n43

如果我们预处理出前kkk个(假装k>nk>\sqrt nk>n),复杂度为

∑i=1nkni=S(nk)\sum_{i=1}^{\frac{n}{k}}\sqrt\frac{n}{i}=S(\frac{n}{k})i=1knin=S(kn)

代入上面的结论

S(nk)=f(nk)=nkS(\frac{n}{k})=f(\frac{n}{k})=\frac{n}{\sqrt{k}}S(kn)=f(kn)=kn

加上预处理后总复杂度O(k+nk)O(k+\frac{n}{\sqrt{k}})O(k+kn)

k=n23k=n^{2 \over3}k=n32时有理论最优复杂度O(n23)O(n^{2\over3})O(n32)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值