数据结构入门之绪论(一)
大纲
一、数据结构
1.1 基本概念
术语 | 解释 |
---|---|
数据 | |
数据元素和数据项 | |
数据对象 | 具有相同性质的数据元素的集合,是数据的一个子集 |
数据结构 | 相互之间存在一种或多种特定关系的数据元素的集合 |
数据类型 | 值的集合和定义在此集合上的一组操作的总称(原子类型和结构类型) |
抽象数据类型(Abstract Data Type) | 是抽象数据组织及与之相关的操作,数学化的语言定义数据的逻辑结构、定义运算。与具体的实现无关。 |
1.2 数据结构三要素
1.2.1 逻辑结构
分类一:
常用逻辑结构 | 解释 |
---|---|
集合结构 | |
线性结构 | 一对一 |
树形结构 | 一对多 |
图状结构 | 多对多 |
分类二:
常用逻辑结构 | 解释 |
---|---|
线性结构 | 线性表、栈、队列、数组 |
非线性结构 | 集合、树、图 |
1.2.2 物理结构
指数据结构在计算机中的表示或映像。存储结构会影响数据运算的速度、存储空间分配的方便与否
常用存储结构 | 解释 |
---|---|
顺序存储 | (下面三种为非顺序存储) |
链式存储 | |
索引存储 | 附加一个索引表(索引项=关键字+地址) |
散列存储(哈希存储) | 根据元素的关键字计算该元素的存储地址 |
- 每种结构的优缺点
1.2.3 数据运算
每个逻辑结构都有自己的基本的数据运算
- 运算的定义是针对逻辑结构的,指出运算的功能
- 运算的实现是针对存储结构的,指出运算的具体操作步骤(即不同存储结构有着不同的实现)
二、算法
2.1 基本概念
2.1.1 五个特性
- 有穷性
算法必须是有穷的,而程序可以是无穷的
- 确定性
相同的输入只能得出相同的输出
- 可行性
能通过基本操作实现算法
- 输入
- 输出
算法处理的结果
2.1.2 优秀算法的标准
- 正确性
- 可读性
- 健壮性
能处理异常状况
- 高效率与低存储
2.2 算法效率度量
2.2.1 时间复杂度分析
事前预估算法时间开销T(n)与问题规模n的关系(T表示“time”)
助记:常对幂指阶
- 一般只需挑循环中的一个基本操作分析它的执行次数与n的关系即可,如果有多层嵌套循环,只需关注最深层循环循环了几次
- 存在不同情况讨论时,平均时间复杂度=各个情况的循环次数与概率的加权和
可以只考虑阶数高的部分
问题规模足够大时,常数项可以忽略
大O表示“同阶”,同等数量级
多项相加,只保留最高阶项;多项相乘都保留
2.2.2 空间复杂度分析
空间开销(内存开销)与问题规模n的关系
- 普通程序
内存装入程序代码和数据,一般程序代码与问题规模无关,而数据格式:
单一变量 | O(1) |
---|---|
一维数组 | O(n) |
k维数组 | O(nk) |
- 递归程序
空间复杂度=递归调用的深度×数据格式
2.2.3 master公式
递归函数可表示成T(N) = a * T(N/b) + O(Nd)
- logba > d时,时间复杂度为O(Nlogba)
- logba < d时,时间复杂度为O(Nd)
- logba = d时,时间复杂度为O(Nd * log2N)