数据结构与算法分析(第一章 引论)

第一章 引论

    • 一、引入
      • 1、选择问题
      • 2、字谜游戏
    • 二、数学知识复习
      • 1.指数
      • 2.对数
      • 3.级数
      • 4.模运算
      • 5.证明方法
        • (1)归纳法证明
        • (2)反证法证明
    • 三、递归简论

本章介绍本书的目的和目标并简要复习离散数学以及程序设计的一些概念。


一、引入

本书讨论的内容是以算法为主,本章开头以两个经典的算法引入。

1、选择问题

设有一组 N N N个数而要确定其中第 k k k个最大者( k ⩽ N k\leqslant N kN)。
有两种通俗的解法:
(1)将这 N N N个数存进一个数组,再通过某种简单的算法(比如冒泡排序法…)以递减顺序将数组排序,然后返回位置 k k k上的元素;
(2)也可以先将前 k k k个元素以递减的顺序读入数组,接着,将剩下的元素逐个读入;让其和数组中的第 k k k个元素进行比较…最终返回数组中的第k个元素。

2、字谜游戏

输入是由一些字母和单词组成的二维数组,目标是要找出字谜中的单词,这些单词可能是水平、垂直或沿着对角线以任何方式放置的。
有两种直观的解法。对单词表中的每个单词,检查每一个有序三元组(行,列,方向)或对于每一个尚未进行到字谜最后的有序四元组(行,列,方向,字符数)可以测试所指的单词是否在单词表中。


二、数学知识复习

这一节列出一些需要记住或是能推导出的基本公式,复习基本的证明的方法。

1.指数

X A X B = X A + B ; X A X B = X A − B ; ( X A ) B = X A B ; X N + X N = 2 X N ≠ X 2 N ; 2 N + 2 N = 2 N + 1 X^{A}X^{B}=X^{A+B};\frac{X^{A}}{X^{B}}=X^{A-B};(X^{A})^{B}=X^{AB};X^{N}+X^{N}=2X^{N}\neq X^{2N};2^{N}+2^{N}=2^{N+1} XAXB=XA+B;XBXA=XAB;(XA)B=XAB;XN+XN=2XN=X2N;2N+2N=2N+1

2.对数

log ⁡ A B = log ⁡ C B log ⁡ C A , C > 0 ; log ⁡ A B = log ⁡ A + log ⁡ B ; log ⁡ A B = log ⁡ A − log ⁡ B ; log ⁡ A B = B log ⁡ A ; log ⁡ X < X , X > 0 \log_{A}{B}=\frac{\log_{C}{B}}{\log_{C}{A}},C>0;\log_{}{AB}=\log_{}{A}+\log_{}{B};\log_{}{AB}=\log_{}{A}-\log_{}{B};\log_{}{A^{B}}=B\log_{}{A};\log_{}{X}0 logAB=logCAlogCB,C>0;logAB=logA+logB;logAB=logAlogB;logAB=BlogA;logX<X,X>0

3.级数

∑ i = 0 N 2 i = 2 N + 1 − 1 ; ∑ i = 0 N A i = A N + 1 − 1 A − 1 , ∑ i = 0 N A i ≤ 1 A − 1 ( 0 < A < 1 ) ; ∑ i = 1 N i = N ( N + 1 ) 2 ≈ N 2 2 \sum_{i=0}^{N}2^{i}=2^{N+1}-1;\sum_{i=0}^{N}A^{i}=\frac{A^{N+1}-1}{A-1},\sum_{i=0}^{N}A^{i}\leq \frac{1}{A-1}(0i=0N2i=2N+11;i=0NAi=A1AN+11,i=0NAiA11(0<A<1);i=1Ni=2N(N+1)2N2
∑ i = 1 N i 2 = N ( N + 1 ) ( 2 N + 1 ) 6 ≈ N 3 3 ; ∑ i = 1 N i k ≈ N k + 1 ∣ k + 1 ∣ , k ≠ − 1 \sum_{i=1}^{N}i^{2}=\frac{N(N+1)(2N+1)}{6}\approx \frac{N^{3}}{3};\sum_{i=1}^{N}i^{k}\approx \frac{N^{k+1}}{\left | k+1 \right |},k\neq -1 i=1Ni2=6N(N+1)(2N+1)3N3;i=1Nikk+1Nk+1,k=1
H N H_{N} HN叫做调和数,其和叫做调和和。下面近似式中的误差趋向于欧拉常数 γ ≈ 0.57721566 \gamma\approx 0.57721566 γ0.57721566
H N = ∑ i = 1 N 1 i ≈ log ⁡ e N ; ∑ i = 1 N f ( N ) = N f ( N ) ; ∑ i = n 0 N f ( i ) = ∑ i = 1 N f ( i ) − ∑ i = 1 n 0 − 1 f ( i ) H_{N}=\sum_{i=1}^{N}\frac{1}{i}\approx \log_{e}{N};\sum_{i=1}^{N}f(N)=Nf(N);\sum_{i=n_{0}}^{N}f(i)=\sum_{i=1}^{N}f(i)-\sum_{i=1}^{n_{0}-1}f(i) HN=i=1Ni1logeN;i=1Nf(N)=Nf(N);i=n0Nf(i)=i=1Nf(i)i=1n01f(i)

4.模运算

如果 N N N整除 A − B A-B AB,那么我们就说 A A A B B B N N N同余,记为 A ≡ B ( m o d N ) A\equiv B(mod N) AB(modN)

5.证明方法

证明数据结构分析中的结论的两个最常用的方法是归纳法和反证法。

(1)归纳法证明

由归纳法进行证明有两个标准部分。第一部分证明基准情形;第二步进行归纳假设。

(2)反证法证明

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


三、递归简论

递归的四条基本准则:
1、基准情形
2、不断推进
3、设计法则:假设所有的递归调用都能运行
4、合成效益法则:在求解一个问题的同一个实例时,切勿在不同的递归调用中做重复性的工作


数据结构与算法分析(第一章 引论)_第1张图片

你可能感兴趣的:(数据结构与算法分析,数据结构)