本课程的学习,要求认真看书,对书中的内容进行归纳和总结,将所有的知识穿成一条线。
* x- X" S3 Y) H! f' O 在看书的过程中,要仔细阅读,对书中重要的内容、概念要记住,因为本课程的考试是采用标准化的考试方式,单选和填空两种题型,因此要求考生对知识的掌握要准确,不能模棱两可。
# S" R) {) c o+ Z( ]# Y1 C 反复地看书,做题,因为本课程主要是一些理论的知识,要求记忆的内容很多,因此,必须多做题,多看书,在做题的过程中检验自己对知识的理解和掌握情况是否到位、正确。自己总结课程的内容,也是帮助理解和记忆的好方法。
% g' N/ y8 R# K( i9 M第一章 数据结构与算法 5 I' v) N: U# c) B: ]* S
一、学习目标与要求
4 A" u2 F% Q& p; i+ ~$ ^! T 1.了解算法的基本概念和一些常用的算法,学会计算算法的时间复杂度;
. q% i8 a' R6 n# I3 |/ H8 r; v 2.掌握数据结构的基本概念,并了解数据的逻辑结构和存储结构,学会利用图形的方式表示数据结构; 2 b9 J1 h' J# v* @, @
3.了解线性表的基本概念,并掌握线性表的顺序存储结构以及顺序存储的线性表的基本运算; : Y9 V# H! C% A& F5 Y6 r+ V( j; K
4.了解栈和队列的基本概念,并掌握它们的基本运算; 3 e7 C7 q1 p6 S! w+ x+ K* b
5.了解线性链表的基本概念,并掌握线性链表的基本运算,同时,了解循环链表的基本概念和基本操作; 9 z$ I* f2 j' `3 s
6.理解树的概念,尤其是二叉树的基本概念和相关性质,掌握二叉树的存储结构和遍历技术; ' j% q* \, |0 M5 k$ |7 |0 }/ q
7.掌握查找技术,学会利用顺序查找和二分查找在数列中查找指定的数据;
& \9 f+ S' i. `3 v+ C 8.学会利用相关的排序技术实现无序数列的排序操作。
+ { ?- Q" ^( J) }9 W7 N4 ?4 ~4 J 二、内容要点
/ i* I- X. Y1 q' E9 S) O (一)算法
% `5 c: r% N3 V# [' K, y6 t* f 1.算法的基本概念
/ \5 h( x9 L& b: j5 l 算法是指解题方案的准确而完整的描述。即是一组严谨地定义运算顺序的规则,并且每一个规则都是有效的,且是明确的,没有二义性,同时该规则将在有限次运算后可终止。 ; p6 j, H2 p4 }( M. Y& j2 o7 k
1)算法的基本特征
/ _( t7 v8 B7 O9 `( V (1)可行性
\/ G4 E4 P6 q+ g1 D( i0 V+ ~ 由于算法的设计是为了在某一个特定的计算工具上解决某一个实际的问题而设计的,因此,它总是受到计算工具的限制,使执行产生偏差。
" M4 a4 Z, q- ]+ l7 k 如:计算机的数值有效位是有限的,当大数和小数进行运算时,往往会因为有效位数的影响而使小数丢失,因此,在算法设计时,应该考虑到这一点。
+ e5 ~3 T* q# x (2)确定性 ! v3 Z3 o0 p' u1 d& \, S
算法的设计必须是每一个步骤都有明确的定义,不允许有模糊的解释,也不能有多义性。 例如,一个实际的问题,小宝和萍萍共有12个苹果,小宝比萍萍多4个,请问小宝和萍萍各有几个苹果?这个问题,我们可以立一个方程来求解,要求x和y的值,公式是正确的,但如何让计算能够进行计算,我们的算法不能把公式直接输进去,而应该设计出解题的步骤和过程。 5 S6 N* Q7 H4 W2 }- \
5 e" B+ G O# T( c; t& Y# T 即设计的算法是计算工具所能够正常解决问题的过程。 % P6 k; m1 W8 x7 |8 h, c8 v
(3)有穷性 7 _$ V: |; a7 a' ?6 b
算法的有穷性,即在一定的时间是能够完成的,即算法应该在计算有限个步骤后能够正常结束。 4 _5 N" w- A& y& j! p
例如,在数学中的无穷级数,在计算机中只能求有限项,即计算的过程是有穷的。 / u) g$ J1 r! X
(4)拥有足够的情报
p) R1 G* x$ T2 }: n 算法的执行与输入的数据和提供的初始条件相关,不同的输入或初始条件会有不同的输出结果,提供准确的初始条件和数据,才能使算法正确执行。 ) U- Z; n0 Q; R
2)算法的基本要素 # p2 Y9 u9 W# N3 e
一是数据对象的运算和操作,二是算法的控制结构。
R O; n; G4 }9 w% `" W (1)算法中对数据的运算和操作
2 b& Z2 B( x7 O7 G m( Y' A4 G 算法实际上是按解题要求从环境能进行的所有操作中选择合适的操作所组成的一组指令序列。即算法是计算机所能够处理的操作所组成的指令序列。 + I% x M2 v: M7 o' K% I
(2)算法的控制结构
2 D9 b' t3 r/ J# l/ v8 I ^ 算法的功能不仅取决于所选用的操作,而且还与各操作之间的顺序有关。 7 g" h" p0 E1 s0 |! z0 i5 B
在算法中,操作的执行顺序又称算法的控制结构,一般的算法控制结构有三种:顺序结构、选择结构和循环结构。
* J8 i, h& r) b2 Q! H6 v5 O, k* A" q 在算法描述是,有相关的工具对这三种结构进行描述,常用的描述工具有:流程图、N-S结构图和算法描述语言等。 * u/ P: f6 _. h
3)算法设计的基本方法
5 F; [, L* ^ ]: l/ V$ n 为用计算机解决实际问题而设计的算法,即是计算机算法。 " ~0 A& }+ C9 ?- l0 Y
通常的算法设计有如下几种: * E$ r5 s8 K! O9 @& g. K
(1)列举法 . ~) r" z* n8 [: t
列举法的基本思想是,根据提出的问题,列举出所有可能的情况,并用问题中给定的条件检验哪些是满足条件的,哪些是不满足条件的。列举法通常用于解决“是否存在”或“有哪些可能”等问题。 - F# _) M' I( @! c
例如,我国古代的趣味数学题:“百钱买百鸡”、“鸡兔同笼”等,均可采用列举法进行解决。
6 a+ E- s% w6 Y8 `( ^, u( M; m" ]& m 使用列举法时,要对问题进行详细的分析,将与问题有关的知识条理化、完备化、系统化,从中找出规律。
+ r( v' M( f9 S (2)归纳法 $ a0 S! t, ]8 q; m
归纳法的基本思想是,通过列举少量的特殊情况,经过分析,最后找出一般的关系。归纳是一种抽象,即从特殊现象中找出一般规律。但由于在归纳法中不可能对所有的情况进行列举,因此,该方法得到的结论只是一种猜测,还需要进行证明。
+ Y6 D# v: Q/ y$ ^2 I (3)递推 # V. U- f% u h) n4 \
递推,即是从已知的初始条件出发,逐次推出所要求的各个中间环节和最后结果。其中初始条件或问题本身已经给定,或是通过对问题的分析与化简而确定。 % I1 }$ p/ T0 B" p! {
递推的本质也是一种归纳,递推关系式通常是归纳的结果。
8 A; a2 n ~/ `; o$ o 例如,裴波那契数列,是采用递推的方法解决问题的。
* i7 w# P+ s/ h5 z (4)递归
& B9 s" w. ^! |; P2 y! t+ i% T 在解决一些复杂问题时,为了降低问题的复杂程序,通常是将问题逐层分解,最后归结为一些最简单的问题。这种将问题逐层分解的过程,并没有对问题进行求解,而只是当解决了最后的问题那些最简单的问题后,再沿着原来分解的逆过程逐步进行综合,这就是递归的方法。 |