1、斯特林公式对阶乘函数的近似为n! = Θ(√2πn( n/e )ⁿ) (n为整数)。这是否意味着n!的增长速度比√2πn( n/e )ⁿ更快、更慢还是相同?绘制n = 1,2,…,20时斯特林公式左右两边比值的图像。随着n值的增加,近似的百分比误差如何变化?
根据大Θ符号的定义,$ n! = \Theta(\sqrt{2\pi n} \left( \frac{n}{e} \right)^n) $ 意味着 $ n! $ 和 $ \sqrt{2\pi n} \left( \frac{n}{e} \right)^n $ 具有相同的增长速度。
要绘制 $ n = 1, 2, \ldots, 20 $ 时斯特林公式左右两边比值的图像,可以计算比值:
$$
r(n) = \frac{n!}{\sqrt{2\pi n} \left( \frac{n}{e} \right)^n}
$$
然后用绘图工具绘制 $ r(n) $ 关于 $ n $ 的图像。
随着 $ n $ 值的增加,斯特林公式近似的百分比误差会逐渐减小。因为斯特林公式是一个渐近近似,当 $ n $ 趋向于无穷大时,近似会越来越精确。
2、对以下涉及O(·)符号的具体命题进行正确或错误分类,如果错误,请给出修正版本:(a) O(n³ + n⁵) = O(n³) + O(n⁵) (b) O(n² × logn) = O(n²) × O(logn) (c) 0.0001n³ + 1000n².⁹⁹ + 17 = O(n³) (d) 4n⁴ + 3n³.² + 13n².¹ = O(n⁷.²) (e) logn¹⁰ = O(logn) (f) (logn)¹⁰ = O(n².¹) (g) 3log₁₀ n² + 10log₂ log₂ n¹⁰ = O(logₑ n)
(a) 正确。根据大O符号性质,$ O(f(n) + g(n)) = O(f(n)) + O(g(n)) $,这里 $ f(n) = n^3 $,$ g(n) = n^5 $。
(b) 正确。大O符号满足 $ O(f(n) \times g(n)) = O(f(n)) \times O(g(n)) $,这里 $ f(n) = n^2 $,$ g(n) = \log n $。
(c) 正确。多项式中最高次项决定其大O复杂度,该式最高次项为 $ n^3 $。
(d) 错误。该式最高次项为 $ n^4 $,应修正为 $ 4n^4 + 3n^{3.2} + 13n^{2.1} = O(n^4) $。
(e) 正确。根据对数运算法则,$ \log n^{10} = 10 \log n $,常数不影响大O复杂度。
(f) 正确。当n足够大时,多项式函数 $ n^{2.1} $ 增长速度快于对数函数的幂 $ (\log n)^{10} $。
(g) 正确。$ 3 \log_{10} n^2 = 6 \log_{10} n $,$ 10 \log_2 \log_2 n^{10} $ 增长速度慢于对数函数,整体复杂度为 $ O(\log_e n) $。
3、对以下关于大O符号(O(·))的通用命题进行判断,看其是否正确;若不正确,请给出修正版本:(a) 若f (n) = O(g(n)),则对于任意的k,有kf (n) = O(g(n))。(b) 若f (n) = O(g(n))且h(n) = O(g′(n)),则f (n) + h(n) = O(g(n) + g′(n))。(c) 若f (n) = O(g(n))且h(n) = O(g′(n)),则f (n)h(n) = O(g(n)g′(n))。(d) 若f (n) = O(g(n))且g(n) = O(h(n)),则f (n) = O(h(n))。(e) 若f (n)是一个d次多项式,则f (n) = O(nd)。(f) 对于k > 0,有lognk = O(logn)。(g) 对于k > 0和j > 0,有(logn)k = O(nj)。
这些命题都是正确的,无需修正。根据大O符号的定义:
- 命题(a)中,由于 $ f(n) $ 受 $ g(n) $ 渐近上界约束,乘以常数 $ k $ 不改变其渐近上界;
- 命题(b)、(c) 是大O符号在加法和乘法运算上的性质;
- 命题(d) 体现了大O符号的传递性;
- 命题(e),多项式的渐近复杂度由其最高次项决定;
- 命题(f),对数函数的幂次不改变其渐近复杂度;
- 命题(g),对数函数的幂次增长速度慢于多项式函数。