教材:《数据结构与算法》第四版 罗文劼
知识重点:基于b站青岛大学王卓老师的网课
1、数据结构的基本概念
- 数据:信息的载体
- 数据项:是数据不可分割的最小单位
- 数据元素:是数据的基本单位
- 一个数据元素由若干个数据项组成
- 数据对象(数据元素类):具有相同性质的数据元素的集合
- 数据结构:相互之间存在着一种或多种关系的数据元素的集合
- 抽象数据类型 = 数据的逻辑结构 + 抽象运算(运算的功能描述)
2、数据结构的分类
- 数据的逻辑结构
- 集合:属于同一个集合
- 线性结构:存在一对一的关系
- 树形结构:存在一对多的关系
- 图形结构(网状结构):存在多对多的关系
- 数据的存储结构
- 顺序存储方法:把逻辑上相邻的元素存储在物理位置相邻的存储单元中,结点间的逻辑关系由存储单元的邻接关系来体现
- 链式存储方法:对逻辑上相邻的元素不要求其物理位置相邻,元素间的逻辑关系通过附设的指针字段来表示
- 索引存储方法
- 散列存储方法
- 数据的运算
- 引用型运算:不改变数据结构中原有的数据元素的状态
- 加工型运算:改变数据结构中原有的数据元素的状态
3、算法
- 算法的特性
- 有穷性:必须在有限时间内完成
- 确定性:算法的每一步必须有确切的定义,无二义性
- 可行性:每一步都可以通过已经实现的基本运算的有限次执行得以实现
- 输入:具有零个或多个输入
- 输出:具有一个或多个输出
- 算法的要求
- 正确
- 可读
- 健壮:当输入不合法数据后,算法能做适当处理
- 高效
- 算法的描述
- 自然语言
- 程序流程图
- N-S图
- 算法的性能分析(时间效率和空间效率有时候是矛盾的)
- 时间复杂度
- 空间复杂度
4、时间复杂度
- 算法时间效率的度量方法
- 事后统计
- 事前分析
- 取决因素
- 硬件的速度
- 书写程序的语言
- 编译程序所生成目标代码的质量
- 问题的规模
- 定义
- 最坏时间复杂度:在最坏情况下(执行完所有),算法的时间复杂度
- 一般总考虑最坏情况下的时间复杂度
- 平均时间复杂度:在所有可能输入实例在等概率出现的情况下,算法的期望运行时间
- 最好时间复杂度:在最好情况下(执行一次 ),算法的时间复杂度
- 最坏时间复杂度:在最坏情况下(执行完所有),算法的时间复杂度
- 计算规则
- 加法规则
- 乘法规则
- 算法时间效率的比较
- 定理1
- 忽略所有低次幂和最高次系数,体现出增长率的含义
- 时间复杂度是嵌套最深层语句的频都所决定的
例题1
例题2
5、空间复杂度
- 定义:算法所需存储空间的度量
- 占据的空间
- 算法本身要占据的空间,输入/输出、指令、常数、变量
- 算法要使用的辅助空间
例题1
总结:
1、数据结构的基本概念要了解清楚
2、时间、空间复杂度要弄懂,当自己编程时,时间空间复杂度要尽可能的小,程序的运行时间才会更快