级数相关

59eb6654682d2.png (230×230)

定义

有数列an,加号连接这些数,得到级数。
S=i=1ai
如果S拥有极限,则称级数S收敛。否则称级数S发散
条件收敛:如果S=ai收敛而|ai|发散,则称S条件收敛
重要性质:对发散级数不能更改求和顺序。(加括号属于更改求和顺序)

黎曼级数定理

一个颠覆常规观念的结论:
如果级数S条件收敛,那么我们可以指定任意实数M,通过调整级数的求和顺序,使得S=M;也可以通过调整级数的求和顺序,使得S=,S=或根本没有极限。

调和级数

级数S=i=11i 称为“调和级数”。
它的前n项和Sn=ln(n+1)+r,其中r被称为“欧拉常数”。
近年来出现了声称调和级数收敛的狗屁论调,我们容易证明调和级数发散:
1+12+13+14+15>1+12+14+14+18+18+18+18
又有右边柿子等于1+12+12+12,发散。
故调和级数发散。
调和级数与lnn同阶,故经常用来证明复杂度。例如下面的代码:
for(i=1;i<=n;i++)
    for(j=1;i*j<=n;j++)
        //do something excited in O(1)
考虑对于某个ij将会有ni个取值。
那么总的j的取值为:i=1nni=ni=1n1i
i=1n1ilnn同阶,故算法复杂度是O(nlogn).

证明复杂度

有时与微积分联系起来,证明复杂度。
例如一个典型的例子。在CDQ分治套莫队算法的时候,会有这种复杂度:T(n)=2T(n2)+O(nn).
惯用伎俩,把复杂度按层考虑。
按层考虑
如上图。对于每个大小为d的块,需要耗费O(dd)的复杂度来处理。
那么以“第几层”为自变量x,则有:第x层有2x个块,每块大小为n2x;故处理每块的复杂度是O(n2xn2x).化简为O(n1.521.5x).
由于这层有2x个块,则处理整层的复杂度是O(n1.520.5x).
共有logn个块,故整个算法的复杂度为:O(x=0log2nn1.520.5x).
由于n1.5x无关,故提取出来。整个算法复杂度为:O(n1.5x=0log2n20.5x).
右边的和式并不好求,我们将它近似到微积分的形式:x=0log2n20.5x0log2n20.5xdx
不妨乘上常数ln2(约等于0.69315)。则复杂度变成: x=0log2n20.5x0log2n(20.5xln2)dx
不妨令f(x)=20.5xln2,则有F(x)=20.5x.
于是0log2n(20.5xln2)dx=20.5x|0log2n
直接解开,得到11n.
因此我们的算法复杂度是:O(n1.5(1n0.5))=O(n1.5n)=O(nn).
好神奇啊,连个log都不带。

Update on 2016.8.30:
uoj的人给出了一种很劲的方法:可以用“主定理”求出上面的递归式的复杂度.
T(n)=2T(n2)+O(n1.5).
因为2<21.5,故有T(n)=O(n1.5)=O(nn).(主定理第二条)
这就完了……去看看算法导论,留坑待补。

Update on 2016.10.3:
此坑已补。

评论

此博客中的热门博文

高中地理必修一知识点总结

【CF961F】k-substrings

偷税与漏税的区别