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

数学知识复习

指数

XAXB=XA+BX^AX^B=X^{A+B}

XAXB=XABfrac{X^A}{X^B}=X^{A-B}

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

XN+XN=2XNX2NX^N+X^N=2X^N eq X^{2N}

对数

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

定义:XA=BX^A=B,当且仅当logXB=Alog_XB=A

定理1.1

logAB=logCBlogCAlog_AB=frac{log_CB}{log_CA}

定理1.2

logAB=logA+logBlogAB=logA+logB

logAB=logAlogBlogfrac{A}{B}=logA-logB

log(AB)=BlogAlog(A^B)=BlogA

logX<XX>0logX<X(对于所有X>0成立)

log1=0,log2=1,log1024=10,log1048576=20log1=0,log2=1,log1024=10,log1048576=20

级数

最容易记忆的公式是

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

i=0NAi=AN+11A1sum_{i=0}^NA^i=frac{A^{N+1}-1}{A-1}

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

i=0NAi11Asum_{i=0}^NA^ileq frac{1}{1-A}

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

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

i=1Ni=N(N+1)2N22sum_{i=1}^Ni=frac{N(N+1)}{2}approxfrac{N^2}{2}

例如,为求出和2+5+8++(3k1)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),显然,它就是3k(k+1)2kfrac{3k(k+1)}{2-k}。另一种记忆的方法则是将第一项与最后一项相加(和为3k+13k+1),第二项与倒数第二项相加(和也是3k+13k+1),等等。由于有k2frac{k}{2}个这样的数对,因此总和就是k(3k+1)2frac{k(3k+1)}{2},这与前面的答案相同。

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

i=1Ni2=N(N+1)(2N+1)6N33sum_{i=1}^Ni^2=frac{N(N+1)(2N+1)}{6}approxfrac{N^3}{3}

i=1NikNk+1k+1k1sum_{i=1}^Ni^kapproxfrac{N^{k+1}}{|k+1|}k eq-1

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

HN=i=1N1ilogeNH_N=sum_{i=1}^Nfrac{1}{i}approx log_eN

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

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

i=n0Nf(i)=i=1Nf(i)i=1n01f(i)sum_{i=n_0}^Nf(i)=sum_{i=1}^Nf(i)-sum_{i=1}^{n_0-1}f(i)

模运算

如果NN整除ABA-B,那么我们就说A与B模N同余(congruent),记为AB(mod N)Aequiv B(modspace N)

如同等号的情形一样,若AB(mod N)Aequiv B(modspace N),则A+CB+C(mod N)A+Cequiv B+C(modspace N)以及ADBD(mod N)ADequiv BD(modspace N)

证明方法

归纳法证明

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

通过反例证明

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

反证法证明

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

递归简论

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

Xleft lfloor X ight floor意为小于或等于X的最大整数。

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

  1. 基准情形。必须总有某些基准情形,它无须递归就能解出。
  2. 不断推进。对于那些需要递归求解的情形,每一次递归调用都必须使求解状况朝接近基准情形的方向推进。
  3. 设计法则。假设所有的递归调用都能运行。
  4. 合成效益法则(compound interest rule)。再求解一个问题的同一个实例时,切勿在不同的递归调用中做重复性的工作。
不一定每天 code well 但要每天 live well
原文地址:https://www.cnblogs.com/geekfx/p/12423072.html