数据结构第一章 绪论

基本概念和术语

数据,数据对象,数据项,数据元素

数据
数据(Data)是客观事物的符号表示,是所有能输入列计算机程序处理的符号的总称。如数学计算中用到的整数和实数,文本编辑中用到的字符串等通过特殊编码定义后的数据。
数据元素
数据元素(Data Element)是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。有时也称元素,记录。用以完整地描述一个对象,如学生管理系统中的一名学生记录。
数据项
数据项(Data Item)是组成数据元素的,有独立含义的,不可分割的最小单位。如学生基本信息的学号,姓名等
数据对象
数据对象(Data Object)是性质相同的数据元素的集合,是数据的子集。不管是有限集还是无限集,还是多个数据项组成的复合数据元素的集合,只要集合内元素的性质相同,都可称为一个数据对象。

数据结构

数据结构是相互之间存在一种或多种特定关系的数据元素的集合。换句话说,数据结构是带“结构”的数据元素的集合,“结构”就是数据元素之间存在的关系。
数据结构包括逻辑结构和存储结构

逻辑结构

逻辑结构是从逻辑关系描述数据,与数据的存储无关。也许,maybe,应该也和数据元素本身的形式,内容,相对位置,个数无关。
可以理解为具体问题抽象出来的数学模型
主要有俩个要素,一是数据元素,二是关系(数据元素之间的逻辑关系)。
根据数据元素之间关系的不同特性,按复杂程度依次有下面几个结构
1.集合结构
请添加图片描述

2.线性结构
请添加图片描述

3.树结构
请添加图片描述

4.图结构
请添加图片描述

其中集合,树,图为非线性结构
而线性结构包含线性表,栈和队列,字符串,数组等(都是后话重要的家伙)

存储结构

数据对象在计算机中的存储表示为数据的存储结构,也称物理结构(注意是数据对象,逻辑结构是数据元素)
存储数据对象时不仅要存储数据元素的数据,还要存储数据元素之间的逻辑关系。
存储结构分为顺序存储结构和链式存储结构
1.顺序存储结构
顺序存储结构是借助元素在存储器中的相对位置来表示元素之间的逻辑关系,通常借组程序语言中的数组类型来描述

请添加图片描述
emmmmm感jio有点死板,这就要求所有元素依次存放在一片连续的存储空间中,而下面的链式存储结构无需占用一整块存储空间
2.链式存储结构
上面提到链式并不需要一整块存储空间,但为了吧表示结点之间的关系,需要给每个结点附加指针字段,用以存放后修结点的存储地址,通常借组程序语言的指针类型描述。
这不链表嘛?!
请添加图片描述
上图或许有点乱,那么下图
请添加图片描述
链表这整容技术也太差了吧!

抽象数据类型

抽象数据类型(Abstract Data Type,ADT)一般指由用户定义的,表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称,具体包括:数据对象,数据对象上关系的集合,对数据对象的基本操作的集合三个部分。
具体定义格式如下:
请添加图片描述
其中数据对象和数据关系的定义采用数学符号和自然语言描述,基本操作的定义格式如下:
请添加图片描述

算法

定义和特性

定义
算法是为了解决某类问题而规定的一个有限长的操作序列。
五个特性
1.有穷性:一个算法必须总是执行有穷步后结束,且每一步必须在有穷时间内完成。
2.确定性:对每种情况下所执行的操作,在算法中都由明确的规定,不会产生二义性。
3.可行性:算法中的所有操作都可以通过已经实现的基本操作运算执行有限次来实现。
4.输入:0个或多个
5.输出:1个或多个,无输出的算法是没有意义的。

评价算法的基本标准

1.正确性:好的算法当然要正确地解决问题阿
2.可读性:好的算法应该便于人们理解和交流,其次才是机器可执行性
3.健壮性:输入数据非法时,好算法应该能做出反应
4,高效性:包括时间空间俩个方面。由时间复杂度,空间复杂度来衡量。

时空间复杂度

时间复杂度

问题规模和语句频度

问题规模是算法求解问题输入量的多少,是问题大小的本质表示,一般用整数n表示。
很显然,n越大,算法的执行时间越长。

不考虑计算机软件硬件等环境因素,影响算法时间代价的最主要因素是问题规模,
语句频度是一条语句重复执行的次数。
一个算法的执行时间大致上等于所有语句执行时间的总和,而一个语句的执行时间等于该语句的执行次数与执行一次所需时间的乘积

时间复杂度的定义

算法的总执行时间要考虑到编译时间阿,软硬件影响等因素,我们采取理想模型法将这些烦人的东西丢掉,设每条语句执行一次所需的时间设为单位时间,则一个算法的执行时间可用该算法所有语句频度之和来度量。
例题
请添加图片描述
所有语句频度之和是矩阵阶数n的函数,表示为
请添加图片描述
这个简单的算法当然可以很轻松地写出n的函数,那如果算法非常复杂或者,n的函数非常复杂呢?
为了客观地反映一个算法的执行时间,可以只用算法中的基本语句的执行次数来度量算法的工作量。
基本语句是算法中执行次数和算法的执行时间成正比,对算法的运行时间贡献最大的语句
用高数中的极限来类比或许易于理解,在求极限时,若只有一个变量且该变量有多个次数时,由最高次决定该极限结果
对于上文中的f(n)
请添加图片描述
f(n)与n^3同阶,也就是数量级相同
算法的渐近时间复杂度,简称时间复杂度表示为
请添加图片描述
O为数量级

时间复杂度分析方法

找出所有语句中语句频度最大的那条语句作为基本语句,计算该语句的频度得到n的某个函数,取其数量级即可
请添加图片描述
需要注意的是若语句频度是与n无关的常数,无论多大,其数量级都是O(1),称为常数阶

最好,坏,平均时间复杂度

最好肯定是时间最少的情况下的时间复杂度,而最坏就反过来啦
平均则是二者的平均值

空间复杂度

大致上与时间相同,只是n变为算法在实现时所需要的辅组空间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值