声明:博主写这个博客的理由只是为了缓解心情,大部分的东西都是我手推的,没有验证过,如果有问题敬请指出。
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)
Hn=∑i=1nin=O(nlogn)
这个怎么证……抱歉蒟蒻真不会……
不过调和级数
∑
n
i
=
1
n
i
\sum{n}_{i=1} \frac{n}{i}
∑ni=1in是微积分中
∫
1
n
1
x
d
x
\int^n_{1} \frac{1}{x} dx
∫1nx1dx的离散模拟。(这话这么说对吗……抱歉蒟蒻非常菜鸡啥都不会)
然后考虑一个推广的情形: T ( n ) = ∑ i = 1 n ( n i ) k T(n)=\sum^{n}_{i=1} (\frac{n}{i})^k T(n)=∑i=1n(in)k
2.
0
<
k
<
1
0<k<1
0<k<1
当
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)
nk∫1nx−kdx=nk1−k1n1−k=1−k1n=O(n)
例如,数论中经常碰到某算法时间复杂度为
∑
i
=
1
n
n
i
\sum^{n}_{i=1} \sqrt{\frac{n}{i}}
∑i=1nin, 该复杂度即为
O
(
n
)
O(n)
O(n).
但是请注意,当
k
k
k接近
1
1
1的时候,
O
(
n
)
O(n)
O(n)的背后将隐藏着巨大的常数……比如
k
=
0.99
k=0.99
k=0.99 , 实验表明当
n
n
n比较小的时候
k
=
0.99
k=0.99
k=0.99和
k
=
1
k=1
k=1差别并不大,但是理论上来说当
n
n
n趋近于
+
i
n
f
+inf
+inf时,前者将收敛于大约
100
n
100n
100n, 后者将发散。
3.
k
>
1
k>1
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)
nk∫1nx−kdx=O(nk)
因此,
k
>
1
k>1
k>1时
n
k
\frac{n}{k}
kn的影响几乎可以忽略。不过同理
k
k
k接近
1
1
1时也会有大常数。
好了心情恢复一点了,继续等待明天的GG……