一:1. 计算机能够求解的问题分为:数值问题 、非数值问题。
数值问题抽象出的数据模型通常是是数学方程;非数值问题抽象出的数据模型通常是线性表、树、图等数据结构。
二:1. 数据:是信息的载体,在计算机科学中是指所有能输入到计算机中并能被计算机程序识别和处理的符号集合。
数据结构分为:整数、实数等数值数据; 文字、声音、图形和图像等非数值数据。
2. 数据元素是数据的基本单位。
构成数据元素的不可分割的最小单位称为数据项
3. 数据结构是指相互之间存在一定关系的数据元素的集合。
4. 按照视点不同分为逻辑结构和存储结构。
- [1] 逻辑结构是指数据元素之间逻辑关系的整体。形式上定义为一个二元组:
- Date_Structure=(D,R)(D是数据元素的有限集合,R是D上的关系集合)
- 根据数据元素之间逻辑关系不同分为:
- (1)集合:数据元素之间就是“属于同一个集合”,除此没任何关系。
- (2)线性结构:数据元素之间存在着一对一的线性关系。
- (3)树结构:数据元素之间存在着一对多的层次关系。
- (4)图结构:数据元素之间存在着多对多的任意关系。
- 树结构和图结构也成为非线性结构
- [2] 存储结构又称物理结构,是数据及其逻辑结构在计算机中的表示。分为顺序储存结构,连接存储结构。
- 顺序存储结构的基本思想:用一组连续的存储单元依次存储数据元素,数据结构之间的逻辑关系由元素的存储位置来表示。
- 链接存储结构的基本思想:用一组任意的存储单元存储数据元素,数据元素之间的逻辑关系用指针表示。
- 5.[1](1)数据类型是一组值的集合以及定义于这个值集上的一组操作的总称。数据类型规定了该数据类型的取值范围和对这些数据所能采取的操作。
- (2)抽象是抽出问题本质的特征而忽略非本质的细节,是对事物的一个概括
- (3)抽象数据类型(ADT)是一个数据结构以及定义在该结构上的一组操作的总称。
- [2]数据类型跟ADT的区别:数据类型指的是高级程序设计语言支持的基本数据类型,ADT知道的是自定义的数据类型。
- 三:算法是解决问题的方法。算法是对特定问题求解步骤的一种描述,是指林的有限序列。
- 1.算法满足的重要特性:
- (1)输入:一个算法有零个或多个输入,这些输入通常取自于某个特定的对象集合。
- (2)输出:一个算法有一个或多个输出,通常输出与输入之间有着某种特定的关系。
- (3)有穷性:一个算法必须总是在执行有穷步之后结束,且每一步都在有穷时间内完成。
- (4)确定性:算法中的每一条指令必须有确切的含义,不存在二义性。并且在任何条件下,对于相同的输入只能得到相同的输出。
- (5)可行性:算法描述的操作可以通过已经实现的基本操作执行有限次来实现。
- 算法和程序是不同的。程序是对一个算法使用某种程序设计语言的具体实现,而算法可以用任何一种程序设计语言实现。算法的有穷性意味着不是所有的计算机程序都是算法。
- 2.好算法具备的特性:
- (1)正确性:算法能满足具体问题的需求,即对于任何合法的输入,算法都会得出正确的结果。
- (2)鲁棒性:也称健壮性。算法对非法输入的抵抗能力,即对于错误的输入,算法应能识别并作出处理,而不是产生错误动作或陷入瘫痪。
- (3)简单性
- (4)抽象分级
- (5)高效性算法的效率包括时间效率和空间效率。时间效率显示了算法运行的有多快:空间效率显示了算法需要多少额外的存储空间。
- 3.算法的描述方法:自然语言,流程图,程序设计语言和伪代码。
- (1)自然语言:最大优点:容易理解,缺点容易出现二义性并且算法通常都很冗长。
- 欧几里得算法用自然语言描述:
- 1.将m除以n得到余数r;
- 2.若r等于0,则n为最大公约数,算法结束;否则执行步骤3;
- 3.将n的值放在m中,将r的值放在n中,重新执行步骤1.
- (2)流程图:优点:直观易懂,缺点:严密性不如程序设计语言,灵活性不如自然语言。
- (3)程序设计语言:优点:能由计算机直接执行,缺点:抽象性差,使算法设计者拘泥于描述算法的具体细节,忽略好算法的和正确逻辑的重要性,且要求设计者掌握程序设计语言及其编程技巧。
- (4)伪代码:是介于自然语言和程序设计语言之间的方法,它采用某一程序设计语言的基本语法,操作指令可以结合自然语言来设计。(算法中自然语言的成分有多少取决于算法的抽象级别,抽象级别越高,自然语言越多)
- 四.1.度量算法效率的方法:[1]事后统计(先将算法实现,然后输入适当的数据运行,测算其时间和空间开销)
- 缺点:(1)编写程序实现算法将花费较多的时间和精力
- (2)所得实验结果依赖于计算机的软硬件等环境因素,有时容易掩盖算法本身的恶劣。[2.]事前分析估算(渐进复杂度)它是对算法所消耗资源的方法。
- 2.影响算法时间代价的最主要因素是问题规模(是指输入量的多少)
- 3.为客观反映一个算法的执行时间,可以用算法中基本语句的执行次数来度量算法的工作量。
- 4.基本语句是执行次数与整个算法的执行次数成正比的语句。
- 5.当问题规模充分大时,算法中基本语句的执行次数在渐近意义下的阶,称算法的渐进时间复杂度,简称时间复杂度,通常用大O(读作“大欧”)记号表示。
- 6.若存在两个正的常数c和n0,对于任意n>=n0,都有T(n)<=c*f(n),
- 则称T(n)=O(f(n))(或称算法在O(f(n)中)
- 7.如果数组的第一个元素恰好就是k,算法只要比较一个元素就行了,这是最好情况
- 如果数组的最后一个元素是k,算法就要比较n-1个元素,这是最坏元素。
- 如果在数组中查找不同的元素k,假设数据是等概率分布,则平均要比较n/2个元素,这是平均情况。
- 8.算法的空间复杂度:是指在算法的执行过程中,需要的辅助空间数量。辅助空间实处算法本身和输入输出数据所占据的空间外,算法临时开辟的存储空间。通常记做:S(n)=O(f(n))(n为问题规模)
- 9.算法的复杂度包括时间复杂度和空间复杂度。
- 10.若A(n)=am*n的m次方+a(m-1)*n的m-1次方+.....+a1n+a0是一个m次方多项式,则A(n)=O(n的m次方)
- 时间复杂度为O(1),称为常量阶;
- 执行次数为n,时间复杂度为O(n),称为线性阶;
- 执行次数为n的平方,时间复杂度为O(n的平方),称为平方阶;
- 执行次数为n(n-1)/2,所以时间复杂度为O(n的平方);
- 设其执行次数为T(n),则有2的T(n)次方<=n,即T(n)<=以2为底n 的次方,所以时间复杂度为O(以2为底n的次方),称为对数阶。
- 常见时间复杂度:
-