【数学】算法复杂度的相关数学公式

1、 log ⁡ 2 n ! = Θ ( n log ⁡ 2 n ) \log_2 n!=\Theta(n\log_2 n) log2n!=Θ(nlog2n)
证明:由Stirling公式, n ! ∼ ( n e ) n 2 π n n!\sim (\frac{n}{e})^n\sqrt{2\pi n} n!(en)n2πn 所以 log ⁡ 2 n ! ∼ n ( log ⁡ 2 n − log ⁡ 2 e ) + 1 2 ( log ⁡ 2 n + log ⁡ 2 2 π ) ∼ ( 1 2 + n ) log ⁡ 2 n = Θ ( n log ⁡ 2 n ) \log_2 n!\sim n(\log_2 n-\log_2 e)+\frac{1}{2}(\log_2 n+\log_2 2\pi)\sim (\frac{1}{2}+n)\log_2 n=\Theta(n\log_2 n) log2n!n(log2nlog2e)+21(log2n+log22π)(21+n)log2n=Θ(nlog2n)严格证明也不难。由 ∼ \sim 定义, ∀ ϵ > 0 \forall \epsilon>0 ϵ>0,存在 N N N使得 ∀ n > N \forall n > N n>N,有 ( 1 − ϵ ) n ! < ( n e ) n 2 π n < ( 1 + ϵ ) n ! (1-\epsilon)n!<(\frac{n}{e})^n\sqrt{2\pi n}<(1+\epsilon)n! (1ϵ)n!<(en)n2πn <(1+ϵ)n!两边取对数,再让 ϵ \epsilon ϵ随便取一个充分小的数即证。

Stirling公式在估计阶乘的方面非常有用。如果不用Stirling公式,也有一种简单的证明,证明如下(以下使用自然对数,结果不影响):
由于 ln ⁡ n ! = ∑ i = 1 n ln ⁡ i \ln n!=\sum_{i=1}^{n}\ln i lnn!=i=1nlni,我们可以考虑用积分来对其进行估计。容易知道: ∫ 1 n ln ⁡ x d x < ∑ i = 2 n ln ⁡ i < ∫ 2 n + 1 ln ⁡ x d x \int_{1}^{n}\ln xdx<\sum_{i=2}^{n}\ln i<\int_{2}^{n+1}\ln xdx 1nlnxdx<i=2nlni<2n+1lnxdx ∫ ln ⁡ x d x = x ln ⁡ x − x + C \int \ln xdx=x\ln x-x+C lnxdx=xlnxx+C,所以 n ln ⁡ n − n + 1 < ∑ i = 2 n ln ⁡ i < ( n + 1 ) ln ⁡ ( n + 1 ) − n + 1 − 2 ln ⁡ 2 n\ln n-n+1<\sum_{i=2}^{n}\ln i<(n+1)\ln(n+1)-n+1-2\ln 2 nlnnn+1<i=2nlni<(n+1)ln(n+1)n+12ln2三边除以 n ln ⁡ n n\ln n nlnn然后让 n n n充分大即得。

2、 ∑ i = 1 n 1 i \sum_{i=1}^{n}\frac{1}{i} i=1ni1的估计。也用积分进行估计。由不等式 ∫ 1 n + 1 1 x d x < ∑ i = 1 n 1 i < ∫ 1 n 1 x d x + 1 \int_{1}^{n+1}\frac{1}{x}dx<\sum_{i=1}^{n}\frac{1}{i}<\int_{1}^{n}\frac{1}{x}dx+1 1n+1x1dx<i=1ni1<1nx1dx+1所以 ln ⁡ ( n + 1 ) < ∑ i = 1 n 1 i < ln ⁡ n + 1 \ln(n+1)<\sum_{i=1}^{n}\frac{1}{i}<\ln n + 1 ln(n+1)<i=1ni1<lnn+1三边除以 ln ⁡ n \ln n lnn,由于我们知道 lim ⁡ n → ∞ ln ⁡ ( n + 1 ) ln ⁡ n = 1 \lim_{n\to \infty}\frac{\ln (n+1)}{\ln n}=1 nlimlnnln(n+1)=1得到 ∑ i = 1 n 1 i = Θ ( log ⁡ n ) \sum_{i=1}^{n}\frac{1}{i}=\Theta(\log n) i=1ni1=Θ(logn)
事实上还有更严格的结论: lim ⁡ n → ∞ ( ∑ i = 1 n 1 i − ln ⁡ n ) = γ = 0.5772... \lim_{n\to \infty} (\sum_{i=1}^{n}\frac{1}{i}-\ln n)=\gamma=0.5772... nlim(i=1ni1lnn)=γ=0.5772...其中 γ \gamma γ为Euler-Mascheroni常数。

3、等差数列求和公式:若 a n = a + ( n − 1 ) q a_n=a+(n-1)q an=a+(n1)q,则 ∑ i = 1 n a n = [ 2 a + ( n − 1 ) q ] n 2 \sum_{i=1}^{n}a_n=\frac{[2a+(n-1)q]n}{2} i=1nan=2[2a+(n1)q]n
等比数列求和公式:若 a n = a q n − 1 a_n=aq^{n-1} an=aqn1,则 ∑ i = 1 n a n = a 1 − q n 1 − q \sum_{i=1}^{n}a_n=a\frac{1-q^n}{1-q} i=1nan=a1q1qn
等差乘等比数列求和公式:若 a n = a + ( n − 1 ) p a_n=a+(n-1)p an=a+(n1)p b n = b q n − 1 b_n=bq^{n-1} bn=bqn1,则 ∑ i = 1 n a i b i = b ( a − p ) ∑ i = 1 n q i − 1 + b p ∑ i = 1 n i q i − 1 = b ( a − p ) 1 − q n 1 − q + b p S \sum_{i=1}^{n}a_ib_i=b(a-p)\sum_{i=1}^{n}q^{i-1}+bp\sum_{i=1}^{n}iq^{i-1}\\=b(a-p)\frac{1-q^n}{1-q}+bpS i=1naibi=b(ap)i=1nqi1+bpi=1niqi1=b(ap)1q1qn+bpS其中 S = ∑ i = 1 n i q i − 1 S=\sum_{i=1}^{n}iq^{i-1} S=i=1niqi1,所以 q S = ∑ i = 1 n i q i = ∑ i = 2 n + 1 ( i − 1 ) q i − 1 qS=\sum_{i=1}^{n}iq^i=\sum_{i=2}^{n+1}(i-1)q^{i-1} qS=i=1niqi=i=2n+1(i1)qi1,所以 ( 1 − q ) S = 1 − n q n + ∑ i = 2 n q i − 1 = 1 − n q n + q ∑ i = 0 n − 2 q i = 1 − n q n + q 1 − q n − 1 1 − q (1-q)S=1-nq^n+\sum_{i=2}^{n}q^{i-1}\\=1-nq^n+q\sum_{i=0}^{n-2}q^{i}=1-nq^n+q\frac{1-q^{n-1}}{1-q} (1q)S=1nqn+i=2nqi1=1nqn+qi=0n2qi=1nqn+q1q1qn1所以 S = 1 1 − q ( 1 − n q n + q 1 − q n − 1 1 − q ) S=\frac{1}{1-q}(1-nq^n+q\frac{1-q^{n-1}}{1-q}) S=1q1(1nqn+q1q1qn1) S S S代入上式即得。

你可能感兴趣的:(数学)