文章目录
1.1 数据结构的基本概念
1.1.1 基本概念和术语
1.数据
数据是信息的载体,是描述客观事物属性的数、字符以及所有能输入到计算机中并被计算和程序识别和处理的符号的集合。
2.数据元素
数据元素是数据的基本单位通常作为一个整体进行考虑和处理。一个数据元素可由若干数据项组成,数据项是构成一个数据元素的不可分割的最新奥单位。例如,学生记录就是一个数据元素,有学号、姓名、性别等数据项构成:
数据元素 | 数据项 | 数据项 | 数据项 | 数据项 |
---|---|---|---|---|
student | name | school_number | gender | … |
3.数据对象
具有相同性质的数据元素的集合,是数据的一个子集。比如整数数据对象(集合Z)是所有整数数据元素(1,2…)的集合。
4.数据类型
一个值的集合和定义在这个集合上的一组操作的总称,有:
- 原子类型:不可再分的数据类型
- 结构类型:可以再分解为若干成分的数据类型
- 抽象数据类型:抽象数据组织以及与之相关的操作
5.抽象数据类型
抽象数据类型(Abstract Data Type)= 数学模型 + 定义在该模型上的一组操作,定义仅取决于逻辑特性,与计算机内部表示和实现无关,数学特性不变就不会影响外部使用,通常用这样的三元组来表示:
- 数据对象
- 数据关系
- 基本操作集
6.数据结构
数据元素之间的相互关系称为结构(structure),包括三方面的内容:
- 逻辑结构:决定算法设计
- 存储结构:决定算法的具体实现
- 数据的运算
1.1.2 数据结构三要素
三要素:
- 数据的逻辑结构
- 数据的存储结构
- 数据的运算
逻辑结构
描述元素之间的逻辑关系,与数据存储无关,是独立于计算机的,分为:
- 线性结构,例如线性表
- 非线性结构,例如树和图
常见的逻辑结构: - 集合:数据元素只有“同属于一个集合”这个关系
- 线性结构:数据元素是一对一的关系
- 树形结构:数据元素是一对多的关系
- 图状结构或网状结构:数据元素是多对多的关系
存储结构
顺序存储
连续的内存空间,逻辑上相邻的数据元素在物理位置也相邻,直接访问,但是增删较为不便,并且由于空间需要提前分配,容易产生外部碎片
链式存储
存储地址的指针表示元素之间的逻辑关系,物理位置不一定相邻,方便增删,但是只能顺序访问,并且指针的使用需要占用额外的内存
索引存储
通过索引表索引存储的数据元素,快速检索,但是索引表需要占据额外的内存,并且维护索引表会产生额外开销
散列存储
根据元素的关键字直接计算出地址,又称Hash存储,操作快速,但是需要解决冲突问题
数据的运算
对这些数据的运算,包括:
- 运算的定义,这是针对逻辑结构的,指出运算的功能
- 运算的实现,这是针对存储结构的,指出运算的具体操作步骤
1.2 算法和算法评价
基本概念
算法(Algorithm)是对特定问题求解步骤的一种描述,是指令的有限序列,其中的每条指令表示一个或者多个操作。此外,一个算法还具有下列的 5 5 5 个重要特性:
- 有穷性:算法在合法输入的前提下,执行有穷步,且每一步在有穷时间内完成
- 确定性:指令无二义性,相同输入得到相同的输出
- 可行性:描述的操作可以通过基本的运算执行有限次实现
- 输入:有零个或者多个输入,输入来自某个特定的对象的集合
- 输出:一个或者多个输出,是和输入有着某种特定关系的量
效率的度量
算法的效率是通过:
- 时间复杂度
- 空间复杂度
来描述的
时间复杂度
语句频度:一个语句在算法中被重复执行的次数,算法中所有的语句的频度之和记为
T
(
n
)
T(n)
T(n),时间复杂度主要分析
T
(
n
)
T(n)
T(n) 的数量级
问题规模:通常用
n
n
n 表示,通常是输入的个数,比如一个排序算法的问题规模就是输入元素的个数
基本运算:最深层循环内的语句,其语句频度和
T
(
n
)
T(n)
T(n) 的数量级相同,记为
f
(
n
)
f(n)
f(n),则算法的时间复杂度记为:
T
(
n
)
=
O
(
f
(
n
)
)
(0)
T(n)=O(f(n))\tag{0}
T(n)=O(f(n))(0)
其中,
O
(
f
(
n
)
)
O(f(n))
O(f(n)) 表示
T
(
n
)
T(n)
T(n) 的数量级
一个算法通常有:
- 最坏时间复杂度:程序最坏情况下的时间复杂度
- 平均时间复杂度:每个输入等概率的情况下,时间复杂度的期望
- 最好时间复杂度:最好情况下的时间复杂度
通常情况下考虑算法的最坏复杂度,保证算法的运行时间不会更长
空间复杂度
空间复杂度
S
(
n
)
S(n)
S(n) 表示算法耗费的存储空间,是问题规模
n
n
n 的函数。通常一个上机程序除了存储所需的指令,常数以及输入的数据等外,还需要一些对数据进行操作的工作单元和存储为实现计算所需的一些信息的辅助空间,若输入数据所占空间只取决于问题本身而与算法无关的话,那么只需要分析除输入和程序外的额外空间
就地工作
指算法需要的辅助空间为常量,即
O
(
1
)
O(1)
O(1)