1. 程式人生 > >【學習筆記】與調和級數相關的時間複雜度

【學習筆記】與調和級數相關的時間複雜度

宣告:博主寫這個部落格的理由只是為了緩解心情,大部分的東西都是我手推的,沒有驗證過,如果有問題敬請指出。

Noip2018day1完掛,非常難受,過來寫個部落格頹一下,緩解心情

1. 調和級數
調和級數Hn=i=1nni=O(nlogn)H_n=\sum^{n}_{i=1} \frac{n}{i}=O(n\log n)
這個怎麼證……抱歉蒟蒻真不會……
不過調和級數ni=1ni\sum{n}_{i=1} \frac{n}{i}是微積分中1n1xdx\int^n_{1} \frac{1}{x} dx的離散模擬。(這話這麼說對嗎……抱歉蒟蒻非常菜雞啥都不會)

然後考慮一個推廣的情形: T(n)=i=1n(ni)kT(n)=\sum^{n}_{i=1} (\frac{n}{i})^k

2. 0<k<10<k<1
k<1k<1時,我們化簡一下式子:仍然考慮轉化為積分式,nk1nxkdx=nk11kn1k=11kn=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)

n1k=1k1n=O(n)
例如,數論中經常碰到某演算法時間複雜度為i=1nni\sum^{n}_{i=1} \sqrt{\frac{n}{i}}, 該複雜度即為O(n)O(n).
但是請注意,當kk接近11的時候,O(n)O(n)的背後將隱藏著巨大的常數……比如k=0.99k=0.99 , 實驗表明當nn比較小的時候k=0.99k=0.99k=1k=1差別並不大,但是理論上來說當nn趨近於+inf+inf時,前者將收斂於大約100n100n, 後者將發散。

3. k>1k>1


k>1k>1時, nk1nxkdx=O(nk)n^k\int_1^n x^{-k} dx=O(n^k)
因此,k>1k>1nk\frac{n}{k}的影響幾乎可以忽略。不過同理kk接近11時也會有大常數。

好了心情恢復一點了,繼續等待明天的GG……