程序 = 数据结构 + 算法
概念
-
数据(数值型,非数值型)
-
数据元素(或称为元素、结点、顶点)
-
数据项(组成数据元素的最小单位,不可分割)
-
数据对象(性质相同数据元素的集合)
-
数据结构 Data Structure
结构——数据元素相互之间的关系 Data Structure 就是相互之间存在一种或多种特定关系的数据元素集合 数据结构三个方面: 1.逻辑结构:线性、非线性 || 集合、线性、树形、图状或网状 2.物理/存储结构:顺序、链式、索引、散列 3.数据的运算和实现 问:逻辑结构和存储结构的关系 存储结构是逻辑关系的映像,逻辑结构是数据结构的抽象,存储结构是数据结构的实现
数据类型
值的集合+值集合上的一组操作
抽象数据类型 Abstract Data Type,ADT
可用(D,S,P)三元组表示
- D 是数据对象
- S 是 D 上的关系集
- P 是对 D 的基本操作集
定义格式
ADT 抽象数据类型名{
数据对象:<数据对象的定义>
数据关系:<数据关系的定义>
基本操作:<基本操作的定义>
}ADT 抽象数据类型名
数据对象与数据关系用伪代码藐视
基本操作要分为:
1、基本操作名(参数表)
2、初始条件(初始条件描述)
3、操作结果(操作结果描述)
抽象数据类型举例:Circle的定义
ADT Circle {
数据对象: D={r,x,y|r,x,y均为实数}
数据关系: R={<r,x,y>|r是半径,<x,y>是圆心坐标}
基本操作:
Circle(&C,r,x,y)
操作结果:构造一个圆;
double Area(C)
初始条件:圆已存在;
操作结果:计算面积;
double Circumference(C)
初始条件:圆已存在;
操作结果:计算周长;
……
}ADT Circle
算法
定义: 对特定问题求解方法和步骤的描述,是指令的有限序列。
算法特性: 有穷性、确定性、可行性、输入(零个或多个)、输出(一个或多个)
算法设计要求: 正确性、可读性、健壮性、高效性
算法分析
考虑“算法效率”:
1.时间效率:事后统计、事前分析(✔)
仅仅比较不同算法的数量级
称 O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度,通常考虑 最坏/平均时间复杂度
<求时间复杂度,首先要找到基本语句>
2.空间效率
渐进空间复杂度
辅助空间
原地工作:空间效率为常数阶,不需要辅助空间
<注:时间效率与空间效率往往是矛盾的>