Per aspera ad astra.
|

Eulbo_1018

园龄:7个月粉丝:0关注:0

第一章 绪论

数据元素是数据的基本单位,通常作为一个整体进行考虑和处理

一个数据元素可由若干数据项组成,数据项是构成数据元素的不可分割的最小单位、

数据对象是具有相同性质的数据元素的集合,是数据的一个子集

数据结构是相互之间存在的一种或者多种特定关系的数据元素的集合

数据结构三要素

逻辑结构,数据的运算,物理结构

逻辑结构——数据元素之间的逻辑关系是什么

  • 集合结构:各个元素同属一个集合,别无其他元素

  • 线性结构:数据元素之间是一对一的关系,除了第一个元素,所有元素都有唯一前缀;除了最后一个元素,所有元素都有唯一后缀

  • 树形结构:数据元素之间是一对多的关系

  • 图结构:数据元素之间是多对多的关系

数据的运算——针对于某种逻辑结构,结合实际需求,定义基本运算

物理结构——如何用计算机表示数据元素的逻辑关系

  • 顺序存储:把逻辑上相邻的元素存储在物理位置上也相邻的存储单元中,元素之间的关系由存储单元的邻接关系来体现

  • 链式存储:逻辑上相邻的元素在物理地址上可以不相邻,借助知识元素存储地址的指针来表示元素之间的逻辑关系

  • 索引存储:在存储元素信息的同时,还建立附加索引表,索引表中的每项被称为索引项,索引项的一般形式是(关键字,地址)

  • 散列存储:根据元素的关键字直接计算出该元素的存储地址,又称为哈希存储

  1. 若采用顺序存储,则各个数据元素在物理上必须是连续的;若采用非顺序存储,则各个数据元素在物理上可以是离散的

  2. 数据的存储结构会影响存储空间分配的方便程度

  3. 数据的存储结构会影响对数据运算的速度

数据类型和抽象数据类型

数据类型是一个值的集合和定义在此集合上的一组操作的总称

  • 原子类型:其值不可再分的数据类型

  • 结构类型:其值可以在分解为若干分量的数据类型

抽象数据类型:是抽象数据组织及与之相关的操作

算法的基本概念

算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中的每条指令表示一个或多个操作

算法的特性

有穷性:一个算法必须总在执行有穷步之后结束,且每一步都可再有穷时间内完成

确定性:算法中的每条指令都必须有确切的含义,对于相同的输入只能得出相同的输出

可行性:算法中描述的操作都可以通过实现的基本运算执行有限次来实现

算法效率的度量

时间复杂度

找到一个基本操作(最深层循环)

分析基本操作的执行次数x与问题规模n的关系x=f(n)

x的数量级O(x)就是算法时间复杂度T(n)

常用技巧

加法原则:多项相加,只保留最高阶的项,且系数变为1

T(n)=T1(n)+T2(n)=O(f(n))+O(g(n))=Q(max(f(n),g(n)))

乘法原则:多项相乘,都保留

T(n)=T1(n)×T2(n)=O(f(n))×O(g(n))=O(f(n)×g(n))

常见的临近时间复杂度为

O(n)<O(log2(n))<O(n)<O(nlog2(n))<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)

速记:常对幂指阶

三种复杂度

最坏时间复杂度:考虑输入数据”最坏“的情况

平均时间复杂度:考虑所有输入数据都等概率出现的情况

最好时间复杂度:考虑输入数据“最好”的情况

空间复杂度

如何计算

普通程序

找到所占空间大小与问题规模相关的变量

分析所占空间x与问题规模n的关系x=f(n)

x的数量级O(x)就是算法空间复杂度S(n)

递归程序

找到递归调用的深度x与问题规模n的关系x=f(n)

x的数量级O(x)就是算法空间复杂度S(n)

有的算法各层函数所需空间不同,分析方法略有区别

常用技巧

加法原则:多项相加,只保留最高阶的项,且系数变为1

T(n)=T1(n)+T2(n)=O(f(n))+O(g(n))=Q(max(f(n),g(n)))

乘法原则:多项相乘,都保留

T(n)=T1(n)×T2(n)=O(f(n))×O(g(n))=O(f(n)×g(n))

常见的临近时间复杂度为

O(n)<O(log2(n))<O(n)<O(nlog2(n))<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)

速记:常对幂指阶

posted @   Eulbo_1018  阅读(6)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起