1.1 基本概念
1.1.1 基本概念与术语:
数据:数据是信息的载体,是描述客观事物属性、字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。
数据元素:数据元素是数据的基本单位,一个数据元素由若干个数据项组成(数据项是是构成数据元素的不可分割的最小单位)。例如:一个人的数据信息,就是一条数据元素,它由姓名、性别等数据项构成。类比数据库,一个表中的一条记录就是数据元素,该记录中的每一列就是数据项。
数据对象:是具有相同性质的数据元素的组合。
数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。数据结构的三要素:逻辑结构,存储结构和数据的运算。
数据对象和数据结构之间联系与差异:
- 数据对象指的是数据元素之间的相同性质。
- 数据结构指的是数据元素之间的相互关系。
- 在同一个数据对象中的数据元素可以有用多种数据结构。eg:张三、李四,和王五等数据记录中,可以根据年龄大小得到线性关系,也可以根据是否是朋友得到一种类似于图的数据结构。
数据类型:原子类型、结构类型、抽象数据类型(数据结构)。
1.1.2 数据结构三要素:
1.逻辑结构:
逻辑结构:元素之间的逻辑关系。它与数据的存储无关,是独立于计算机的。逻辑结构分类图如图所示:
在考研中主要考察线性结构、树形结构和图状结构。
2.数据的运算:
是指针对与某种逻辑结构定义的基本运算。运算的定义是针对逻辑结构的,指出运算的功能。运算实现是针对存储结构的,指出了运算的具体步骤。
当定义好了逻辑结构并基于该结构定义了数据运算,就相当于定义了一种数据结构(抽象数据类型)。
3.存储结构:
存储结构是指的数据结构在计算机中的表示,也称为物理结构。它包含数据元素的表示和关系的表示。存储结构有以下几种方式
- 顺序结构:逻辑上相邻的元素所存储在的物理位置也是相邻的。优点是可以随机存取,缺点是由于使用的是一整块内存地址,所以容易产生较多的外部碎片。
- 链式存储:逻辑上相邻的元素所存储的物理位置不一定相邻,它借助于指针来表示元素之间的关系。优点是不会产生碎片,可以充分利用存储单元。缺点是只能顺序存取,且指针域占用额外的内存。
- 索引存储:在存储数据元素时,还附加了索引表。索引中的每一项称为索引项。优点是可以快速检索数据,缺点增删时需要修改索引表,时间开销大,并且索引表占用额外存储空间。
- 散列存储:根据元素的关键字可以直接计算存储地址。优点是检索,增删元素都很快,缺点若散列函数选取不好,易出现存储单元冲突,为解决冲突而增加时空开销。
1.2 算法与算法评价
1.2.1 基本概念
算法:对特定问题的求解步骤,是指令的有限序列,其中每个指令表示一个或多个操作。算法还具有以下特点:
- 有穷性:一个算法在有穷步后结束,每一步在有穷时间内完成。
- 确定性:算法的每一条指令具有明确的含义,对于相同的输入要有相同的输出。
- 可行性:算法的描述操作都可以通过已经实现的基本运算执行有限次来实现的。
- 输入:一个算法有零个或多个输入。
- 输出:一个算法至少要用一个输出。
一个好的算法还应该考虑以下几个目标:正确性、可读性、健壮性。高效率与低存储。
程序 = 数据结构 + 算法
eg:做西红柿炒鸡蛋:食材(数据结构) + 步骤(算法)
1.2.2 算法效率的度量
1.时间复杂度
一个语句的频度是指该语句在算法中执行的重复次数。算法中的频度之和记为T(n)。
通常使用算法中的基本运算频度f(n),来表示时间复杂度,记为:T(n) = O(f(n))。一般情况下,我们只考虑平均时间复杂度和最坏时间复杂度。
计算方法:保留最高阶的n,去除其他项和该项的系数。类似于数学中,n趋于趋于无穷时取极限。
2.空间复杂度
表示:S(n) = O(f(n))
算法的原地工作是指算法所需要的辅助空间为常量,O(1).
在考研中,递归的空间复杂度一般为递归深度