基本概念
考试内容
数据、数据元素、数据项、数据对象、数据结构的定义
数据:
是客观事物的符号表示,是所有能输入到计算机中并被计算机程序处理的符号的总称
数据元素:
数据元素是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。
在有些情况下,数据元素也称为元素、记录等。
数据元素用于完整地描述一个对象,如前一节示例中的一名学生记录,树中棋盘的一个格局(状态),以及图中的一个顶点等。
数据项:
数据项是组成数据元素的、有独立含义的、不可分割的最小单位。
数据对象:
数据对象是性质相同的数据元素的集合,是数据的一个子集。
不论数据元素集合是无限集(如整数集),或是有限集(如字母字符集),还是由多个数据项组成的复合数据元素(如学生表) 的集合, 只要集合内元素的性质均相同, 都可称之为一个数据对象。
数据结构:
数据结构是计算机存储、组织数据的方式。
数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。
数据结构反映数据的内部构成,即数据由那部分构成,以什么方式构成,以及数据元素之间呈现的结构。
数据的逻辑结构、数据的物理结构、数据的运算的定义
逻辑结构:
数据的逻辑结构是从逻辑关系上描述数据,它与数据的存储无关,是独立千计算机的。因此,数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。
数据的逻辑结构有两个要素:一是数据元素;二是关系。
物理结构:
数据对象在计算机中的存储表示称为数据的存储结构,也称为物理结构。
把数据对象存储到计算机时,通常要求既要存储各数据元素的数据, 又要存储数据元素之间的逻辑关系,数据元素在计算机内用一个结点来表示。
数据元素在计算机中有两种基本的存储结构,分别是顺序存储结构和链式存储结构。
数据类型以及抽象数据类型的定义
数据类型:
数据类型(Data Type) 是高级程序设计语言中的一个基本概念。
数据类型是一个值的集合和定义在这个值集上的一组操作的总称。
抽象数据类型:
抽象数据类型(Abstract Data Type, ADT) 一般指由用户定义的、表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称,具体包括三部分:数据对象、数据对象上关系的集合以及对数据对象的基本操作的集合。
考试要求
数据、数据元素、数据项之间的关系:
数据元素:数据元素是数据的基本单位
数据项:数据项是数据的不可分割的最小单位
掌握数据结构的三要素
逻辑结构
存储结构
数据的运算
数据类型、抽象数据类型和数据结构之间的关系
算法与算法分析
考试内容
算法的定义,算法的特性、算法的时间复杂度和算法的空间复杂度的定义及计算
算法:
是为了解决某类问题而规定的一个有限长的操作序列。
算法的特性:
有穷性:一个算法必须总是在执行有穷步后结束,且每一步都必须在有穷时间内完成。
确定性:对千每种情况下所应执行的操作,在算法中都有确切的规定,不会产生二义性,使算法的执行者或阅读者都能明确其含义及如何执行。
可行性:算法中的所有操作都可以通过已经实现的基本操作运算执行有限次来实现。
输入:一个算法有零个或多个输入。当用函数描述算法时,输入往往是通过形参表示的,在它们被调用时,从主调函数获得输入值。
输出:一个算法有一个或多个输出,它们是算法进行信息加工后得到的结果,无输出的算法没有任何意义。当用函数描述算法时,输出多用返回值或引用类型的形参表示。
时间复杂度:
一条语句的重复执行次数称作语句频度;
一般情况下, 算法中基本语句重复执行的次数是问题规模n的某个函数f(n), 算法的时间量度记作:T(n)= O(f(n));
它表示随问题规模n的增大,算法执行时间的增长率和函数的增长率相同,称做算法的渐近时间复杂度,简称时间复杂度
空间复杂度:
关于算法的存储空间需求,类似于算法的时间复杂度
我们采用渐近空间复杂度(Space Complexity)作为算法所需存储空间的扯度,简称空间复杂度,它也是问题规模n的函数,记作:S(n) = O(f (n))
考试要求
算法的定义以及特性
评价算法的优劣的标准:
确定性:在合理的数据输入下,能够在有限的运行时间内得到正确的结果。
可读性:一个好的算法,首先应便千人们理解和相互交流, 其次才是机器可执行性。可读性强的算法有助于人们对算法的理解,而难懂的算法易千隐藏错误,且难千调试和修改。
健壮性:当输入的数据非法时,好的算法能适当地做出正确反应或进行相应处理,而不会产生一些莫名其妙的输出结果
高效性:高效性包括时间和空间两个方面。时间高效是指算法设计合理,执行效率高,可以用时间复杂度来度量;空间高效是指算法占用存储容量合理,可以用空间复杂度来度量。时间复杂度和空间复杂度是衡量算法的两个主要指标
了解衡量算法在资源上的两个方面
时间复杂度
空间复杂度
掌握算法的渐进性分析方法,会用该方法对算法进行评估
渐进性分析:
通过输入规模的增加来计算算法需要的时间和空间的增长趋势
掌握Ο标记法,理解大Ο标记法的意义
O标记法:
对于f(n),存在正数n0,c,使得当 n>=n0 时,始终存在 0 <= f(n) <= c*g(n),则我们可以用 f(n)=O(g(n))表示。
O标记法适用于描述函数渐进行为的数学符号,用另一个函数来描述一个函数数量级的渐近上界
掌握Ω标记法,理解大Ω标记法的意义
Ω标记法:
对于f(n),存在正数n0、c,使得当 n>=n0 时,始终存在 0 <= c*g(n) <= f(n),则我们可以用 f(n)=Ω(g(n))表示。
定义了算法的渐进下界
掌握Θ标记法,理解大Θ标记法的意义
Θ标记法:
对于f(n),存在正数n0、c1、c2,使得当 n>=n0 时,始终存在 0 <= c1g(n) <= f(n) <= c2g(n),则我们可以用 f(n)=Θ(g(n))表示。
定义了一个精确的渐进行为
了解时空权衡原则
时空权衡原则:
通过降低或提高算法的空间效率来提高或降低时间效率以解决问题的方法。