定義
調和級數 : \(\sum\limits^{\infty}_{i=1}{\frac{1}{i}}\)
\(f_n=\sum\limits^{n}_{i=1}{\frac{1}{i}}\)
計算
\(f_n = 1 + \frac{1}{2} + \frac{1}{3} + \frac{1}{4} + \frac{1}{5} + \frac{1}{6} + \frac{1}{6} + \dotsm + \frac{1}{n} < 1 + \frac{1}{2} + \frac{1}{2} + \frac{1}{4} + \frac{1}{4} + \frac{1}{4} + \frac{1}{4} + \dotsm + 1 = O(\ln n)\)
即 \(f_n = O(\ln n)\)
實際上 \(f_n = \ln n + \gamma + o(\frac{1}{2n})\) ,其中 \(\gamma = 0.57721 56649 01532 86060 65120 90082 40243 10421 59335 \dotso\) ,是尤拉常數。
當 \(n \rightarrow \infty, f_n = \ln n + \gamma\)
程式碼實現:
- 當 \(n\) 比較小的時候可以按定義式計算 \(f_n\) ,儘量不要用 \(\ln n + \gamma\) 來算,因為有 \(o(\frac{1}{2n})\) 的誤差
- 當 \(n\) 比較大的時候直接計算 \(\ln n + \gamma\)
例題
Luogu P5147 隨機數生成器
設 \(g_n\) 為 \(\text{work}(n)\) 的期望值
對於 \(n > 1\)
\(g_n = 1 + \frac{1}{n}\sum\limits^n_{i=1}{g_i}\)
\(n \times g_n = n + \sum\limits^n_{i=1}{g_i}\)
\((n - 1) \times g_n = n + \sum\limits^{n-1}_{i=1}{g_i}\) \((1)\)
換元 \(n \leftarrow n - 1\)
\((n - 2) \times g_{n-1} = n - 1 + \sum\limits^{n-2}_{i=1}{g_i}\) \((2)\)
\((1)\) 式 \(-\) \((2)\) 式,得
\((n - 1) \times g_n - (n - 2) \times g_{n-1} = 1 + g_{n-1}\)
\(g_n = g_{n-1} + \frac{1}{n-1}\)
則