手动博客搬家: 本文发表于20181110 16:13:39, 原地址https://blog.csdn.net/suncongbo/article/details/83930408
声明:博主写这个博客的理由只是为了缓解心情,大部分的东西都是我手推的,没有验证过,如果有问题敬请指出。
Noip2018day1完挂,非常难受,过来写个博客颓一下,缓解心情
1. 调和级数
调和级数(H_n=sum^{n}_{i=1} frac{n}{i}=O(nlog n))
这个怎么证……抱歉蒟蒻真不会……感性理解就是(1+frac{1}{2}+frac{1}{4}+frac{1}{4}+frac{1}{8}+frac{1}{8}+frac{1}{8}+frac{1}{8}+...<1+frac{1}{2}+frac{1}{3}+...<1+frac{1}{2}+frac{1}{2}+frac{1}{4}+frac{1}{4}+frac{1}{4}+frac{1}{4}+frac{1}{8}+frac{1}{8}+frac{1}{8}+frac{1}{8}+frac{1}{8}+frac{1}{8}+frac{1}{8}+frac{1}{8}...)
不过调和级数(sum^{n}_{i=1} frac{n}{i})是微积分中(int^n_{1} frac{1}{x} dx)的离散模拟。(这话这么说对吗……抱歉蒟蒻非常菜鸡啥都不会)
然后考虑一个推广的情形: (T(n)=sum^{n}_{i=1} (frac{n}{i})^k)
2. (0<k<1)
当(k<1)时,我们化简一下式子:仍然考虑转化为积分式,(n^kint^{n}_{1} x^{-k} dx=n^kfrac{1}{1-k}n^{1-k}=frac{1}{1-k}n=O(n))
例如,数论中经常碰到某算法时间复杂度为(sum^{n}_{i=1} sqrt{frac{n}{i}}), 该复杂度即为(O(n)).
但是请注意,当(k)接近(1)的时候,(O(n))的背后将隐藏着巨大的常数……比如(k=0.99) , 实验表明当(n)比较小的时候(k=0.99)和(k=1)差别并不大,但是理论上来说当(n)趋近于(+inf)时,前者和(n)的比值将收敛于大约(100), 后者和(n)的比值将发散。
3. (k>1)
当(k>1)时, (n^kint_1^n x^{-k} dx=O(n^k))
因此,(k>1)时(frac{n}{k})的影响几乎可以忽略。不过同理(k)接近(1)时也会有大常数。
好了心情恢复一点了,继续等待明天的GG……