1.数据结构的研究对象
数据结构是一门研究非数值计算的程序设计中计算机的操作对象以及它们之间的关系和操作的学科。
2.基本概念和术语
1.数据:数据是对客观事物的符号表示,在计算机科学中指所有能够输入到计算机中并被计算机程序处理的符号的总称
2.数据元素:数据元素是数据的基本单位,中计算机程序中常常以一个整体进行处理,例如学生信息系统是中全部信息数据,其中数据元素就是一个学生的,而其中的姓名,学号等则是一个个数据项,一个数据元素由若干个数据项组成。
3.数据对象:数据对象是相同类型的数据元素的集合。
4.数据结构:数据结构是存在一种或者多种关系的数据元素的集合。
数据结构基本概念的关系
3.数据结构的分类
数据结构主要分为 1.逻辑结构
2.物理结构(存储结构)
1.逻辑结构:集合结构第2种划分
线性结构1.线性关系:线性表,栈,队列,表
树形结构2.非线性关系:树,图
图状结构
2.存储结构:顺序存储结构(C语言数组实现)
链式存储结构(C语言链表实现)
索引存储结构(通讯录查找功能实现)
散列数据结构
4.抽象数据结构
抽象数据结构=逻辑结构+数据运算
抽象数据结构具有三个部分:1.数据元素 2.数据关系 3.基本操作
其中,数据元素和数据关系的描述用伪码(类C语言)表示
基本操作的形式具有一定格式,如下:
基本操作名(参数名)
初始条件:(初始条件描述)
操作结构:(操作结果描述)
抽象数据结构的实现:
ADT 抽象数据结构类型名
{
数据对象:
数据关系:
基本操作:
}ADT 抽象数据结构类型名
5.算法和算法分析
1.算法的定义:
2.算法的描述
a.自然语言
b.流程图
c.伪代码
d.程序代码
3.算法和程序的区别
程序=数据结构+算法
4.算法的五大特性
a.有穷性:算法的执行在有穷步中结束
b.确定性:算法只有一个执行路径,语句无二义性
c.可行性:算法是能够通过有限次的执行完成的
d.输入:算法可以有0个或多个输入
e.输出:算法至少有1个输出
5.算法设计的要求
a.正确性
正确性的分级:
b.可读性:便于人的理解和阅读交流
c.健壮性:当输入数据非法时,也能适当地做出反应,不会莫名其妙输出结果
d.效率和低存储量需求
6.算法效率
算法效率分为 1.时间效率
2.空间效率
1.算法效率的度量
a.事后统计
缺陷:1.必须把算法实现为程序
2.所得时间与计算机硬件和软件存在关系,有时候会掩盖算法的缺陷
b.事前分析估算
算法运行时间=每条语句执行次数*每次执行所需时间
时间效率的描述
渐进时间复杂度:T(n)=O( f(n) )
n为问题规模
表达渐进时间复杂度需要经过三个步骤
1.寻找基本操作
2.找出语句频度表达式 f(n)
3.选择量级
基本操作:基本操作指的是算法在重复次数最多,与算法执行时间成正比,并且对运行时间贡献最大,执行次数最多的语句
计算复杂算法的时间复杂度
将算法拆分为容易估算的多个部分,经过O的加法和乘法运算得到结果
加法时取多个部分中的时间消耗最大值
乘法运算不可省略,需要全部相乘再得结果
输入值影响算法时间复杂度的情况
有些算法的输入值会影响基本操作运行的次数,进而影响算法的渐进时间复杂度。
由于输入值完全是随机的
所以产生了三个概念
1.最坏时间复杂度
2.最好时间复杂度
3.平均时间复杂度(所有可能输入值的时间平均值)
目录
空间复杂度是算法所需存储空间的度量
辅助空间:如用于交换值的中间变量t
如果输入数据所占空间于算法无关,只与问题本身有关,则只需要分析输入和程序之外的额外空间(辅助空间),
如上图,只有一个额外空间t,所以它的空间复杂度为 S(n)=O(1)
当这种情况时,额外空间相对于输入数据量是常数,则称为此算法原地工作
与时间复杂度相同的是,当输入会影响空间复杂度时,通常考虑最坏空间复杂度。