【学习笔记】与调和级数相关的时间复杂度

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/suncongbo/article/details/83930408

声明:博主写这个博客的理由只是为了缓解心情,大部分的东西都是我手推的,没有验证过,如果有问题敬请指出。

Noip2018day1完挂,非常难受,过来写个博客颓一下,缓解心情

1. 调和级数
调和级数 H n = i = 1 n n i = O ( n log n ) H_n=\sum^{n}_{i=1} \frac{n}{i}=O(n\log n)
这个怎么证……抱歉蒟蒻真不会……
不过调和级数 n i = 1 n i \sum{n}_{i=1} \frac{n}{i} 是微积分中 1 n 1 x d x \int^n_{1} \frac{1}{x} dx 的离散模拟。(这话这么说对吗……抱歉蒟蒻非常菜鸡啥都不会)

然后考虑一个推广的情形: T ( n ) = i = 1 n ( n i ) k T(n)=\sum^{n}_{i=1} (\frac{n}{i})^k

2. 0 < k < 1 0<k<1
k < 1 k<1 时,我们化简一下式子:仍然考虑转化为积分式, n k 1 n x k d x = n k 1 1 k n 1 k = 1 1 k n = O ( n ) n^k\int^{n}_{1} x^{-k} dx=n^k\frac{1}{1-k}n^{1-k}=\frac{1}{1-k}n=O(n)
例如,数论中经常碰到某算法时间复杂度为 i = 1 n n i \sum^{n}_{i=1} \sqrt{\frac{n}{i}} , 该复杂度即为 O ( n ) O(n) .
但是请注意,当 k k 接近 1 1 的时候, O ( n ) O(n) 的背后将隐藏着巨大的常数……比如 k = 0.99 k=0.99 , 实验表明当 n n 比较小的时候 k = 0.99 k=0.99 k = 1 k=1 差别并不大,但是理论上来说当 n n 趋近于 + i n f +inf 时,前者将收敛于大约 100 n 100n , 后者将发散。

3. k > 1 k>1
k > 1 k>1 时, n k 1 n x k d x = O ( n k ) n^k\int_1^n x^{-k} dx=O(n^k)
因此, k > 1 k>1 n k \frac{n}{k} 的影响几乎可以忽略。不过同理 k k 接近 1 1 时也会有大常数。

好了心情恢复一点了,继续等待明天的GG……

猜你喜欢

转载自blog.csdn.net/suncongbo/article/details/83930408