数据结构与算法-绪论

数据结构与算法-绪论

数据结构的基本概念

数据元素数据项: 数据元素是数据的基本单位,通常作为一个整体进行考虑和处理。 一个数据元素可由若干数据项组成,数据项是构成数据元素的不可分割的最小单位。

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

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

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

举例:
(1)人就是数据的基本单位数据元素。

(2)此时姓名,年龄,身高,体重,身价等就可以理解为数据项。

(3)每个人都具有以上的性质和属性,他们就都属于同一个数据对象。

(4)人与人之间个体之间存在差异,也有许多人之间具有某种关系,比如很多人会很有钱,可以把这些很有钱的人放在一起,形成了数据结构。

(5)不同数据元素之间可能组成相同的数据结构。比如穷人和富人。

(6)同一个数据对象里的 数据元素,可以组成 不同的数据结构。他们可能组成线性结构,也可能组成网状结构等。

数据结构的三要素

  • 数据的逻辑关系
    集合:数据元素同属于一个集合,无其他关系
    线性结构:数据元素一对一关系,两大类,线性结构(线性表,栈,队列),非线性结构(树,图,集合)
    树形结构: 数据元素一对多关系
    图/网状结构: 数据元素多对多关系

  • 数据的运算
    针对于某种逻辑结构,结合实际需求,定义基本运算。
    运算的定义->针对逻辑结构
    运算的实现->针对存储结构

  • 数据的存储(物理)结构
    数据的存储结构是用计算机语言实现的逻辑结构。
    主要有:
    顺序存储:逻辑上相邻的元素存储在物理位置上也相邻的存储单元中。
    链式存储:不要求逻辑上相邻的元素在物理位置上也相邻,而是借助指示元素存储地址的指针来表示元素之间的逻辑关系。
    索引存储:存储信息的同时,还建立附加的索引表。
    散列存储:根据元素的关键字直接计算出钙元素的存储地址。

Tips:
(1) 数据的存储结构会影响存储空间分配的方便程度。
(2) 数据的存储结构会影响数据运算的速度。

算法的基本概念

算法:对特定问题的求解步骤的一种描述。
数据结构 -> 用数据正确的描述现实世界的问题,并存入计算机。
算法 -> 如何高效地处理这些数据,以解决问题。

  • 5个重要特性
    (1) 有穷性:算法必须在有穷时间内执行有穷步之后结束;而程序可以是无穷的,一直执行下去(比如微信)
    (2) 确定性:对于相同的输入只能得出相同的输出。
    (3) 可行性:基本运算执行有限次来实现。
    (4) 输入:零个或多个输入。
    (5) 输出:一个或多个输出。输出和输入有着某种特定关系。

  • 好算法的特征
    (1) 正确性
    (2) 可读性
    (3) 健壮性:输入非法数据是,算法能适当地做出反应或进行处理。
    (4) 效率和低存储需求:空间复杂度,时间复杂度低。

效率的度量

  • 时间复杂度
    时间开销T(n)和问题规模n的关系。
    (1) 算法中基本运算(最深层循环内的语句)的频度与T(n)同数量级。
    因此通常采用算法中基本运算的频度f(n)来分析时间复杂度。
    具体取f(n)中随n增长最快的项,并将其系数置为1. 如f(n) = an^3 + bn^2 + cn的时间复杂度为O(n^3).
    记为:T(n) = O(f(n)).O代表T(n)和f(n)同数量级,为同阶无穷小。
    (2) 常见的渐进时间复杂度:
    常数阶O(1) < 对数阶O(log2n) < 线性阶O(n) < 线性对数阶O(nlog2n) < 平方阶O(n^2) <立方阶O(n^3) < 指数阶O(2^n) < 阶乘阶O(n!) <N次方阶O(n^n)
    口诀:常对幂指阶
    (3) Notes:
    ① 顺序执行的代码只会影响常数项,可以忽略。
    ② 循环中只需要挑一个基本操作来分析它的执行次数和n的关系即可。
    ③ 加法规则:T(n,m) = T1(n) + T2(n) = O (max ( f(n),g(m) )
    乘法规则:T(n,m) = T1(n) * T2(m) = O (f(n) * g(m))
    ④ 一般只考虑平均时间复杂度和最坏时间复杂度。

  • 空间复杂度
    (1) 程序允许时的内存需求:
    程序代码:大小固定,与问题规模无关。
    数据:局部变量,参数等。
    (2) 算法原地工作:算法所需内存空间为常数。
    (3) 只需要关注存储空间大小与问题规模n相关的变量。
    (5) 函数递归调用带来的内存开销。空间复杂度 == 递归调用深度。特殊情况例外(例如申请了大小为n的数组)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值