这是离散数学中一道关于算法渐进复杂度的证明题:求证 $\log_2n!\in\Theta(n\log_2n)$ 。
看了网上的一些证明,大多借助斯特林公式,即 $\lim\limits_{n\to+\infty}\frac{n!}{\sqrt{2\pi n}(\frac ne)^n}=1$ ,将 $n!$ 替换成同阶的 $\sqrt{2\pi n}(\frac ne)^n$ 进行证明。若不熟悉该公式,很难想到这种等价替换。在此给出一种比较朴素的证明方法。
证明分两部分:
1. 先证 $\log_2n!\in O(n\log_2n)$
∵ ∀n>0, log2n!≤log2nn=nlog2n∴ log2n!∈O(nlog2n)
2. 再证 $\log_2n!\in \Omega(n\log_2n)$
∵ n!≥(2n)2n∴ log2n!≥log2(2n)2n=2nlog22n=2nlog2n−2nlog22∵ ∀n>4, 2nlog22=4nlog24<4nlog2n∴ ∀n>4, log2n!≥2nlog2n−4nlog2n=41nlog2n∴ log2n!∈Ω(nlog2n)
综上所述, $\log_2n!\in\Theta(n\log_2n)$ 。