概念
数据结构
数据
data 数据是客观事物的符号表示
- 数据元素(data element):数据元素是数据的基本单位,简称元素
- 复合数据元素:学生基本信息表,一行看成一个数据元素,记录,
- 数据项(data item):
- 数据对象:性质相同的数据元素的集合,整数数据对象
- 数据结构:相互之间存在一种或多种特定关系的数据元素的集合(结构的含义,数据元素之间存在的关系)
三要素
- 逻辑结构(数据元素+ 关系)
- 集合结构:所有数据元素属于同一个集合
- 线性结构(一对一):除了开头和结尾,其他节点都一个直接前驱和直接后继
- 树形结构(一对多):除了最上面的根结点和最下面的叶子节点,其他结点都有一个直接前驱和多个直接后继
- 图结构(多对多): 数据的逻辑结构是独立于计算机的,可以把他看作是从具体问题抽象出来的数据模型,逻辑结构并不关心这些结构中的数据元素是如何存储在计算机主存中的
- 存储结构:(数据对象的所有元素+元素之间的关系)
- 顺序存储结构:借助元素在存储器中的相对位置来标志数据元素之间的逻辑结构数组
- 链式存储结构 逻辑结构和存储机构相同就是同一个数据结构吗?
- 数据的运算(相关操作)
抽象数据类型
- 数据结构的声明(逻辑结构,相关操作声明)
数据对象: 数据关系: 相关操作:
API:程序编程结构(Application program interface) 提高代码的可扩展性
ADT(abstract data struct)
- 数据结构的实现(存储结构,相关操作实现)
算法(Algorithm)
算法就是为了解决某类问题而规定的一个有限长的操作序列,数据结构的每个
算法是研究数据结构的重要类型
特点
- 有穷性:一个算法必须总是在执行有穷步后结束
- 确定性
- 可行性
- 输入:
- 输出:返回值,参数中的指针
评价算法
- 正确性
- 可读性
- 健壮性:不可理的数据
- 高效性:
- 时间
- 空间
时间复杂度
表示随着问题规模n的增大,算法执行时间的增长率(增长趋势)用T(n)表示,
计算算法所有语句执行总次数 O O是一个渐进符号
数量级(Order of Magnitude)
算法导论中定义 对于给定函数g(n),用O(g(n))表示一个函数集合
n趋向于无穷大时,函数的增长趋势
问题规模n
问题规模是算法求解问题输入量是多少,整数n表示
语句频度
一条语句的重复执行次数
基本语句
之算法中重复次数最多的语句,对算法运行时间贡献最大
- 平方阶
- 线性阶
- 立方阶
- 对数阶
- 常量阶
加法法则
总的时间复杂度是所有代码段时间复杂度之后
求最大时间复杂度
- O(1)+O(N)+O(N^2)=O(1+N+N^2)=O(N^2)
- O(1)+O(N)+O(m)=O(N+M)=O(max(N,M))
乘法法则
嵌套循环:嵌套内外代码复杂度的乘积
O(N)* O(N)=O(N^2)
最好、最差以及平均时间复杂度
主要在查找算法中,概率乘以次数
空间复杂度
算法的存储空间与问题规模n之间的增长关系,实际就是辅助存储空间和问题规模N
存储空间:
- 指令(占用存储空间不变)
- 数据
- 输入数据
- 临时数据(辅助存储空间)
O(1):辅助存储空间和问题规模无关(原地工作算法)