数据结构与算法分析之引言(一)


这一小结主要复习一些有关于数据结构中的一些数学基础知识以及基本的概念,以便于进行下一阶段的学习和复习。

1. 数学基础知识复习

1.1 指数运算:

\[X^{A}X^{B}=X^{A+B} \]

\[\frac{X^{A}}{X^{B}}=X^{A-B} \]

\[(X^{A})^{B}=X^{AB} \]

特别地,\(2^{N}+2^{N}=2^{N+1}\)

1.2 对数运算:

在计算机中一般使用二进制方式计算,所以无特殊说明情况下,在程序运算中谈及到对数问题都指的是以\(2\)为底数的对数。
定义:\(X^{A}=B,当且仅当\log_{X}B=A\),并且有以下的运算定理:
定理1:

\[\log_{A}B=\frac{\log_{C}B}{\log_{C}A},C>0 \]

证明如下:假设\(X=\log_{C}B,Y=\log_{C}A,Z=\log_{A}B\),那么便有\(C^{X}=B,C^{Y}=A,A^{Z}=B\)。所以得到\((C^{Y})^{Z}=A^{Z}=B=C^{X}\),从而得到\(X=YZ\),\(Z=\frac{X}{Y}\),定理得证。
定理2:

\[\log{AB}=\log{A}+\log{B} \]

证明如下:假设\(Z=\log{AB},X=\log{A},Y=\log{B}\),那么得到\(2^{Z}=AB,2^{X}=A,2^{Y}=B\),所以得到\(Z=X+Y\),定理得证。
还有一些最基本的数学运算表达式,如下所示:

\[\log{\frac{A}{B}}=\log{A}-\log{B} \]

\[\log{A^{B}}=B\log{A} \]

\[\log{X}<X,\forall{X>0} \]

1.3 级数运算

几何级数:

\[\sum\limits_{k=0}^{N}A^{k}=\frac{A^{N+1}-1}{A-1} \]

特别地,当\(0<A<1\)的时候,会有以下的极限表达式:

\[\lim\limits_{N\rightarrow+\infty}\sum\limits_{k=0}^{N}A^{k}=\lim\limits_{N\rightarrow+\infty}\frac{A^{N+1}-1}{A-1}=\frac{1}{1-A} \]

最常见的两个级数表达式:\(\sum\limits_{k=0}^{N}2^{k}=2^{N+1}-1\),\(\sum\limits_{k=0}^{N}\frac{k}{2^{k}}=\frac{N}{2^{N}}-\frac{N+1}{2^{N-1}}+2\),后者一般使用错位相减的方法计算:
设级数和\(S_{N}=\sum\limits_{k=0}^{N}kA^{k}\),那么必有\(AS_{N}=\sum\limits_{k=0}^{N}kA^{k+1}\)。两个等式相减,我们可以得到:

\[(1-A)S_{N}=A+A^{2}+...+A^{N}-NA^{N+1}=\frac{A(1-A^{N})}{1-A}-NA^{N+1} \]

从而可以得到

\[S_{N}=\frac{NA^{N+2}-(N+1)A^{N+1}+A}{(1-A)^{2}} \]

还有一些最为基本的求和公式:

\[\sum\limits_{k=1}^{N}k=\frac{N(N+1)}{2}\approx{\frac{N^{2}}{2}} \]

\[\sum\limits_{k=1}^{N}k^{2}=\frac{N(N+1)(2N+1)}{6}\approx{\frac{N^{3}}{3}} \]

一般地,有以下的近似表达式:

\[\sum\limits_{k=1}^{N}k^{m}=\frac{N^{k+1}}{|m+1|},m\neq -1 \]

\(m=-1\)的时候,上述表达式并不成立,称\(k=-1\)的时候级数和为调和级数\(H_{N}\):

\[H_{N}=\sum\limits_{k=1}^{N}\frac{1}{k}\approx{\log_{e}N} \]

上述的误差趋近于一个常数。一般地,称这个常数误差

\[\gamma=\lim\limits_{N\rightarrow+\infty}(\sum\limits_{k=1}^{N}\frac{1}{k}-\ln(N))=\int_{1}^{+\infty}(\frac{1}{\lfloor x \rfloor}-\frac{1}{x})dx \]

为欧拉级数。

1.4 模运算

如果\(N\)整除\(A-B\),那么一般称\(A\)\(B\)\(N\)同余,并记做\(A\equiv B(\mod N)\),并且有\(A+C\equiv B+C(\mod N)\)以及\(A+D\equiv B+D(\mod N)\)

1.5 数学证明方法

数学归纳法:
数学归纳法是一种最基本的数学演绎推理证明的方法。数学归纳法有很多种变体的形式,其中包括有第一数学归纳法、第二数学归纳法、倒推数学归纳法、螺旋数学归纳法、递归归纳法、跳跃归纳法等等,一般以问题的形式来选择这些归纳法。这里我们仅仅介绍第一、第二数学归纳法:
第一数学归纳法:一般地,证明一个与自然数\(n\)有关的命题\(P(n)\),有以下的步骤:
(1)证明当\(n\)取第一个值\(n_{0}\)时候命题成立;
(2)假设当\(n=k,(k\geq n_{0},k\in{Z^{+}})\)时候命题成立;
(3)证明当\(n=k+1\)时候命题也成立。
综合(1)、(2)和(3),即对于一切自然数\(n,(n\geq n_{0})\),命题\(P(n)\)都成立。
第二数学归纳法:
与第一数学归纳法不同之处在于,假设部分是关于\(n\)小于\(k\)的时候也成立的假设。即有以下的步骤:
(1)证明当\(n=n_{0}\)的时候,等式成立;
(2)假设当\(n\leq k\)时候,所有的等式成立;
(3)证明当\(n=k+1\)的时候等式也成立。
通过举反例证明: 这里就不再多说明这种方法了,举出与规律不相符合的例子即可。
反证法证明:
反证法是通过假设定理不成立,然后证明该假设导致某个已知的性质不成立,从而得到原来的假设是错误的,从而证明了提出的问题。最经典的例子是证明素数有无限多个素数。

2. 程序中的递归方法

程序递归过程需要满足四条基本的法则,即

  1. 基准情形:必须总要有基准的情况,无需进行递归过程即可以求出表达式的值,一般指的是递归过程回调部分。
  2. 不断推进:对于那些需要递归求解的情形,每一次递归调用都必须要使得求解状况朝着接近基准的方向推进。
  3. 设计法则:假设所有的递归调用都必须能运行。
  4. 合成效益法则:在求解一个问题的同一实例时候,切勿在不同的递归调用中做着重复的工作。
posted @ 2020-04-25 19:59  人生起风了  阅读(300)  评论(0)    收藏  举报