数据结构与算法分析-引论

数学知识复习

指数

X A X B = X A + B X^AX^B=X^{A+B}

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

( X A ) B = X A B (X^A)^B=X^{AB}

X N + X N = 2 X N X 2 N X^N+X^N=2X^N\neq X^{2N}

对数

在计算机科学中,除非有特别的声明,所有的对数都是以2为底的。

定义: X A = B X^A=B ,当且仅当 l o g X B = A log_XB=A

定理1.1

l o g A B = l o g C B l o g C A log_AB=\frac{log_CB}{log_CA}

定理1.2

l o g A B = l o g A + l o g B logAB=logA+logB

l o g A B = l o g A l o g B log\frac{A}{B}=logA-logB

l o g ( A B ) = B l o g A log(A^B)=BlogA

l o g X < X X > 0 logX<X(对于所有X>0成立)

l o g 1 = 0 , l o g 2 = 1 , l o g 1024 = 10 , l o g 1048576 = 20 log1=0,log2=1,log1024=10,log1048576=20

级数

最容易记忆的公式是

i = 0 N 2 i = 2 N + 1 1 \sum^N_{i=0}2^i=2^{N+1}-1

i = 0 N A i = A N + 1 1 A 1 \sum_{i=0}^NA^i=\frac{A^{N+1}-1}{A-1}

在第二个公式中,如果 0 < A < 1 0<A<1 ,则

i = 0 N A i 1 1 A \sum_{i=0}^NA^i\leq \frac{1}{1-A}

当N趋向 \infty 时该和趋向于 1 1 A \frac{1}{1-A} ,这些公式是“几何级数”公式。

分析中另一种常用类型的级数是算术级数。任何这样的级数都可以通过基本公式计算其值。

i = 1 N i = N ( N + 1 ) 2 N 2 2 \sum_{i=1}^Ni=\frac{N(N+1)}{2}\approx\frac{N^2}{2}

例如,为求出和 2 + 5 + 8 + + ( 3 k 1 ) 2+5+8+\cdots +(3k-1) ,将其改写为 3 ( 1 + 2 + 3 + + k ) ( 1 + 1 + 1 + + 1 ) 3(1+2+3+\cdots+k)-(1+1+1+\cdots +1) ,显然,它就是 3 k ( k + 1 ) 2 k \frac{3k(k+1)}{2-k} 。另一种记忆的方法则是将第一项与最后一项相加(和为 3 k + 1 3k+1 ),第二项与倒数第二项相加(和也是 3 k + 1 3k+1 ),等等。由于有 k 2 \frac{k}{2} 个这样的数对,因此总和就是 k ( 3 k + 1 ) 2 \frac{k(3k+1)}{2} ,这与前面的答案相同。

现在介绍下面两个公式,它们就没有那么常见了。

i = 1 N i 2 = N ( N + 1 ) ( 2 N + 1 ) 6 N 3 3 \sum_{i=1}^Ni^2=\frac{N(N+1)(2N+1)}{6}\approx\frac{N^3}{3}

i = 1 N i k N k + 1 k + 1 k 1 \sum_{i=1}^Ni^k\approx\frac{N^{k+1}}{|k+1|}k\neq-1

k 1 k\neq-1 时,后一个的公式不成立。此时我们需要下面的公式,这个公式在计算机科学中的使用要远比在数学其他科目中使用得多。数 H N H_N 叫做调和数,其和叫做调和和。下面近似式中的误差趋向于 γ 0.57721566 \gamma\approx0.57721566 ,这个值被称为欧拉常数(Euler’s constant)。

H N = i = 1 N 1 i l o g e N H_N=\sum_{i=1}^N\frac{1}{i}\approx log_eN

以下两个公式只不过是一般的代数运算。

i = 1 N f ( N ) = N f ( N ) \sum_{i=1}^Nf(N)=Nf(N)

i = n 0 N f ( i ) = i = 1 N f ( i ) i = 1 n 0 1 f ( i ) \sum_{i=n_0}^Nf(i)=\sum_{i=1}^Nf(i)-\sum_{i=1}^{n_0-1}f(i)

模运算

如果 N N 整除 A B A-B ,那么我们就说A与B模N同余(congruent),记为 A B ( m o d   N ) A\equiv B(mod\space N)

如同等号的情形一样,若 A B ( m o d   N ) A\equiv B(mod\space N) ,则 A + C B + C ( m o d   N ) A+C\equiv B+C(mod\space N) 以及 A D B D ( m o d   N ) AD\equiv BD(mod\space N)

证明方法

归纳法证明

由归纳法进行证明有两个标准的部分。第一步是证明基准情形(base case),就是确定定理对于某个(某些)小的值的正确性。接着,进行归纳假设(inductive hypothesis)。一般来说,这意味着假设定理对直到某个有限数 k k 的所有的情况都是成立的。至此定理得证(在 k k 是有限的情形下)。

通过反例证明

公式 F k k 2 F_k\leq k^2 不成立。证明这个结论的最容易的方法就是计算 F 11 = 144 > 1 1 2 F_{11}=144>11^2

反证法证明

反证法证明是通过假设定理不成立,然后证明假设导致某个已知的性质不成立,从而说明原假设是错误的。

递归简论

过程(procedure)即为返回值为void型的函数。

X \left \lfloor X \right \rfloor 意为小于或等于X的最大整数。

当编写递归例程的时候,关键是要牢记递归的四条基本法则:

  1. 基准情形。必须总有某些基准情形,它无须递归就能解出。
  2. 不断推进。对于那些需要递归求解的情形,每一次递归调用都必须使求解状况朝接近基准情形的方向推进。
  3. 设计法则。假设所有的递归调用都能运行。
  4. 合成效益法则(compound interest rule)。再求解一个问题的同一个实例时,切勿在不同的递归调用中做重复性的工作。
发布了32 篇原创文章 · 获赞 18 · 访问量 3247

猜你喜欢

转载自blog.csdn.net/u011714517/article/details/104025221