408数据结构——绪论&复杂度分析

绪论&复杂度分析

考纲内容

    • 数据结构与算法的基本概念
    • 算法复杂度的分析和计算

要求内容

    • 理解数据结构与算法的基本概念
    • 会分析和计算复杂度
  • 思维导图索引
    画布 1.png

1.数据结构概念

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

1.1 数据

  • 数据是信息的载体

1.2 数据元素

  • 数据元素是数据的基本单位
  • 一个数据元素可由若干个数据项组成
  • 数据项是构成数据元素的不可分割的最小单位
    结构关系图如下:数据 > 数据对象 > 数据元素

数据关系图.png

1.3 数据类型

  • 原子类型。其值不可再分的数据类型。如:int
  • 结构类型。其值可以再分解成若干成分的数据类型。如:struct结构体
  • 抽象数据类型。抽象数据组织与之相关的操作

1.4 数据结构

  • 数据结构是相互之间存在一种或多种特定关系数据元素的集合
  • 任何问题中,数据元素都不是孤立存在的,之间存在某种特定的关系,这种数据元素相互之间的关系称为结构
  • 逻辑结构、存储结构、数据的运算

1.5 数据结构三要素

1.5.1 数据的逻辑结构
•从逻辑关系上描述·数据结构,与数据的存储无关
•逻辑结构分为线性结构和非线性结构
•典型的线性结构——线性表
•典型的非线性结构——集合、树、图

分类如下
逻辑结构图.png


  • 集合:同属一个集合,别无其他关系,如图(a)
  • 线性结构:结构中的数据元素只存在一对一关系,如图(b)
  • 树形结构:结构中的数据元素存在一对多关系,如图©
  • 图状或者网状结构:结构中的数据元素存在多对多关系,如图(d)
    4类基本结构关系示例图.png
1.5.2 数据的存储结构
  • 存储结构是数据结构在计算机中的表示(也称映像),又称物理结构。它包括数据元素的表示和关系的表示
  • 数据的存储结构主要有顺序存储、链式存储、索引存储和散列存储

  • 顺序存储

逻辑上相邻的元素存储在物理位置上也相邻的存储单元中,物理位置即信息在计算机中的位置,元素关系由存储单元的邻接关系体现

优点

可以实现随机存储,每个元素占最少的存储空间

缺点

只能使用相邻的一整块存储单元,如果存储连续的几个数据,可能会出现较多的未利用的空间


  • 链式存储

不要求逻辑上相邻的元素在物理位置上也相邻,可以借助指示元素存储地址的指针来表示元素之间的逻辑关系

优点

不会出现碎片现象,能充分利用所有存储单元

缺点

每个元素因为存储指针而占用额外存储空间,没有上一个指针的地址找不到下一个,只能实现顺序存取


  • 索引存储

在存储元素信息的同时,还建立附加的索引表,分别存放数据元素和元素间关系的存储方式,索引表每项称为索引项,索引项的一般形式是(关键字,地址)以后可以联系操作系统的文件系统章节来理解

优点

检索速度快

缺点

附加的索引表额外占用存储空间,增加和删除数据也要修改索引表,花费时间。


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

优点

检索、增加、删除结点的操作都很快

缺点

若散列函数不好,可能会出现元素存储单元的冲突。而解决冲突会增加时间和空间的开销


1.5.3 数据的运算

包括运算的定义和实现。运算的定义是针对逻辑结构的,指出运算的功能。运算的实现是针对存储结构的,指出运算的具体操作步骤。


2. 算法的基本概念和评价

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

2.1 算法的五个重要特性


  • 有穷性

有限步骤后结束,每一步都可在有穷时间内完成

  • 确定性

算法中每条指令必须有确切的含义,不存在二义性,即没有歧义

  • 可行性

比如受限于计算机的计算能力,有些算法虽然理论上可行,但实际上无法完成。

  • 输入

一个算法有一个或多个输入

  • 输出

一个算法有一个或多个输出


此外设计一个好的算法应该还要考虑以下4个目标

(1)正确性:算法能够正确的解决求解问题

(2)可读性:算法具有良好的可读性,以便帮助理解

(3)健壮性:输入非法数据时,算法能适当的做出反应或处理,而不会产生莫名奇妙的结果

(4)效率与低存储量需求:效率指的是算法执行的时间,
   存储量需求是指算法执行过程中所需要的最大存储空间,这两者都与问题的规模有关

2.2 算法的时间复杂度

所有语句的频度(执行次数)之和记为 T ( n ) T(n) T(n) ,时间复杂度主要分析 T ( n ) T(n) T(n) 的数量级,通常采用算法中基本运算的频度(执行次数)来分析时间复杂度。因此,算法的时间复杂度记为 T ( n ) = O ( f ( n ) ) T(n) = O(f(n)) T(n)=O(f(n))例如 T ( n ) = n 2 + n + 1 , T ( n ) = O ( n 2 ) T(n)=n^2+n+1,T(n)=O(n^2) T(n)=n2+n+1T(n)=O(n2)
O ( n 2 ) O(n^2) O(n2) 即为所求的复杂度


一般只考虑最坏情况下的时间复杂度,以保证算法的运行时间不会比它更长


  • 加法规则

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

T ( n ) = T 1 ( n ) + T 2   ( n ) = O ( f ( n ) ) + O ( g ( n ) ) = O ( m a x ( f ( n ) , g ( n ) ) ) T(n)= T_1(n) + T_2~(n) = O(f(n)) + O(g(n)) = O(max(f(n),g(n))) T(n)=T1(n)+T2 (n)=O(f(n))+O(g(n))=O(max(f(n),g(n)))

  • 乘法规则

多项相乘,都保留

T ( n ) = T 1 × T 2   ( n ) = O ( f ( n ) ) × O ( g ( n ) ) = O ( f ( n ) × g ( n ) ) T(n)= T_1×T_2~(n) = O(f(n)) × O(g(n)) = O(f(n)×g(n)) T(n)=T1×T2 (n)=O(f(n))×O(g(n))

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值