数据结构 学习总结1 序论

1.1 数据结构的研究内容

数据结构研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等的学科。

1.2 基本概念和术语

  1. 数据(Data):是客观事物的符号表示。在计算机科学中指的是所有能输入到计算机中并被计算机程序处理的符号总称。
  2. 数据元素(Data Element):是数据的基本单位,在程序中通常作为一个整体来进行考虑和处理。
  3. 数据项(Data Item)是组成数据元素的、有独立含义的、不可分割的最小单位。一个数据元素可由若干个数据项组成。数据项是对客观事物某一方面特性的数据描述。
  4. 数据对象(Data Object):是性质相同的数据元素的集合,是数据的一个子集。如字符集合
    Char = {‘A’, ‘B’, ‘C’,……}

数据 —— 包括数字、字符、声音、图像等信息 。

数据元素 —— 又称元素、结点,顶点、记录等。

数据项 —— 又称字段、域、属性 等。

四者之间的关系:
数据 > 数据对象 > 数据元素 > 数据项
例:班级通讯录 > 个人记录 > 姓名、年龄……

什么是数据结构?
答: 是相互之间存在一种或多种特定关系的数据元素的集合,表示为:Data_Structure=(D, S)D元素有限集,S关系有限集
或:是指同一数据元素类中各元素之间存在的关系。
亦可表示为:S=(D, R) 或 B=(K, R)

数据的逻辑结构?
答:指数据元素之间的逻辑关系。即从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。是从具体问题抽象出来的数学模型。
数据元素之间的关系可以是元素之间代表某种含义的自然关系,也可以是为处理问题方便而人为定义的关系,这种自然或人为定义的“关系”称为数据元素之间的逻辑关系。

逻辑结构可细分为4类:
在这里插入图片描述
在这里插入图片描述

例:用图形表示下列数据结构,并指出它 们是属于线性结构还是非线性结构。
1) S=(D, R)
D={ a, b, c, d, e, f }
R={(a,e), (b,c), (c,a), (e,f), (f,d)}

解: 上述表达式可用图形表示为:
b -> c -> a -> e -> f -> d

此结构为线性的。

数据的物理结构

物理结构亦称存储结构,是数据的逻辑结构在计算机存储器内的表示(或映像)。它依赖于计算机。

数据结构在计算机内存中的存储包括数据元素的存储和元素之间的关系的表示。
两种基本存储结构:顺序存储结构和链式存储结构

顺序存储结构:用数据元素在存储器中的相对位置来表示数据元素之间的逻辑结构(关系)。

**链式存储结构:**在每一个数据元素中增加一个存储另一个元素地址的指针,用该指针来表示数据元素之间的逻辑结构(关系)。

存储结构还有:索引结构和散列结构
数据的逻辑结构和物理结构是密不可分的两个方面,一个算法的设计取决于所选定的逻辑结构,而算法的实现依赖于所采用的存储结构。

数据的运算

在数据的逻辑结构上定义的操作算法。
它在数据的存储结构上实现。最常用的数据运算有5种:
插入、删除、修改、查找、排序

在这里插入图片描述

1.3数据类型和抽象数据类型

数据类型:是一个值的集合和定义在该值上的一组操作的总称。
数据结构不同于数据类型,也不同于数据对象,它不仅要描述数据类型的数据对象,而且要描述数据对象各元素之间的相互关系。

抽象数据类型:由用户定义,用以表示应用问题的数据模型。它由基本的数据类型构成,并包括一组相关的服务(或称操作)。抽象数据类型的定义仅是一组逻辑特性描述, 与其在计算机内的表示和实现无关。因此,不论ADT的内部结构如何变化,只要其数学特性不变,都不影响其外部使用。它与数据类型实质上是一个概念,但其特征是使用与实现分离,实行封装和信息隐蔽(独立于计算机)。

抽象数据类型可以用以下的三元组来表示:
ADT = (D,S,P)

            数据对象   D上的关系集    D上的操作集 

定义格式:
在这里插入图片描述

抽象数据类型可以通过固有的数据类型
(如整型、实型、字符型等)来表示和实现。
即利用处理器中已存在的数据类型来说明新的结构,用已经实现的操作来组合新的操作。

1.4 算法和算法分析

什么是算法?

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

一个算法可以用多种方法描述,主要有:使用自然语言描述;使用形式语言描述;使用计算机程序设计语言描述。
算法和程序是两个不同的概念。一个计算机程序是对一个算法使用某种程序设计语言的具体实现。算法必须可终止意味着不是所有的计算机程序都是算法。

算法有5个基本特性:
有穷性
确定性
可行性
输入
输出

一个好的算法有以下几个标准

(1) 正确性
(2) 可读性
(3) 健壮性
(4) 通用性
(5) 效率与低存储需求

算法效率可以用依据该算法编写的程序在计算机上执行所消耗的时间来度量。
两种度量方法
事后统计
将算法实现,测算其时间和空间开销。
缺点
编写程序实现算法将花费较多的时间和精力;
所得实验结果依赖于计算机的软硬件等环境因素
事前分析
对算法所消耗资源的一种估算方法

事前分析
一个高级语言程序在计算机上运行所消耗的时间取决于
算法选用的策略
问题的规模
编写程序的语言
编译程序产生的机器代码质量
机器执行指令的速度
同一个算法用不同的语言、不同的编译程序、在不同的计算机上运行,效率均不同。因此,使用绝对时间单位衡量算法效率是不合适的。
算法效率的度量
算法的构成 = 控制结构 + 原操作(固有数据类型的操作)

算法的执行时间=∑(原操作(i)的执行次数×原操作(i)的执行时间

算法的执行时间 与 原操作执行次数之和 成正比
算法的运行时间由算法中所有语句的频度之和构成。
算法的时间复杂度是由嵌套最深层语句的频度决定的。

算法效率的度量
一个特定算法的 “运行工作量”大小,只依赖于问题的规模(通常用整数n 表示),即它是问题规模的函数。
一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数f(n)。
随着问题规模 n 的增长,算法执行时间的增长率 和 f(n) 的增长率相同,则可记作:
T(n) = O(f(n))
称T(n)为算法的渐近时间复杂度

渐进符号(O)的定义
若T(n)和f(n)是定义在正整数集合上的两个函数,则T(n) = O(f(n))表示存在两个正常数C和n0,使得当n ≥ n0时都满足 0 ≤ T(n) ≤ Cf(n)。
T(n)和f(n)具有相同的增长趋势
f(n)是参照物,通常是一些常用的标准函数。常用的7种函数:
O(1)、O(log2n) 、 O(n)、 O(nlog2n)、O(n2)、O(n3)、 O(2n)
当n充分大时有:
O(1)< O(log2n) <O(n)< O(nlog2n) < O(n2) < O(n3) < O(2n)

定理:若f(n)=amnm+am-1nm-1++a1n+a0是一个m次多项式,则 T(n) = O(nm)。

**运算规则
1、O(f(n))+O(g(n)) = O( max(f(n), g(n)))
2、O(cf(n)) = O(f(n)), c是正整数
3、O(f(n))O(g(n)) = O( f(n)g(n))

说明: 在计算算法时间复杂度时,可以忽略所有低次幂
和最高次幂的系数

例子
100n + 6 = O(n)
10 n2 + 4n + 2 = O(n2)
6*2n + n2 = O(2n)

有的情况下,算法中基本操作重复执行的次数还随问题的输入
数据集不同而不同。
在这里插入图片描述
对这类算法的分析,一种解决办法是计算平均值,即考虑它对
所有可能的输入数据集的期望值。
但是,很多情况下,各种输入数据集出现的概率难以确定。
余下讨论的时间复杂度均指最坏情况下的时间复杂度。

空间复杂度
算法开始运行直至结束过程中所需要的最大存储资源开销的一种度量。
S(n) = O( f(n) )
表示随着问题规模 n 的增大,算法运行所需存储量的增长率与 f(n) 的增长率相同。
算法占据的存储空间
输入数据所占空间;
程序本身所占空间;
辅助变量所占空间。
一维数组的空间复杂度是O(n)
n*n矩阵的空间复杂度为O(n2)

若输入数据所占空间只取决于问题本身,和算法无关,则只需要分析除输入和程序之外的辅助变量所占额外空间。

原地工作:若额外辅助空间相对于输入数据量来说是常数,则称此算法为原地工作。
若额外空间所占空间量依赖于特定的输入,则除特别指明外,均按最坏情况来分析。

【算法1】 S(n) = O(1) 原地工作
for(i=0; i<n/2; i++)
{ t=a[i];
a[i]=a[n-i-1];
a[n-i-1]=t;}

【算法2】 S(n) = O(n)
for(i=0; i<n; i++)
b[i]=a[n-i-1];
for(i=0; i<n; i++)
a[i]=b[i];

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值