每日学习录(数据结构绪论+算法)

目录

一、数据结构绪论

1.1 基本概念和术语

1.11 数据

1.12 数据元素

数据元素(Data Element):

1.13 数据项

数据项(Data Item):

1.14 数据对象

数据对象(Data Object):是性质相同的数据元素的集合,是数据的一个子集。例如:整数数据对象是集合N={0,±1,+2,…},字母字符数据对象是集合C={'A','B',…,Z' ,'a', 'b',…,'z'},学生基本信息表也可以是一个数据对象。由此可以看出,不论数据元素集合是无限集(如整数集),或是有限集(如字母字符集),还是由多个数据项组成的复合数据元素(如学生表)的集合,只要集合内的性质均相同,都可称之为一个数据对象。

1.15 数据结构

1.2 逻辑结构和物理结构

1.21 逻辑结构

1.集合结构

2.线性结构

3.树形结构

4.图形结构

1.22 物理结构(存储结构)

1.顺序存储结构

1.3抽象数据类型

1.31数据类型

1.32抽象数据类型

二、算法

2.1 两种算法的比较

2.2 算法的定义

2.3 算法的特性

2.31 输入输出

2.32 有穷性

2.33 确定性

2.34 可行性

2.4 算法设计的要求

2.41 正确性

2.42 可读性

2.43 健壮性

2.44 时间效率高和存储量低

2.5 函数的渐进增长

2.6 算法时间复杂度

2.61算法时间复杂度定义

2.62 推导大O阶方法

2.63 常数阶

2.64 线性阶

2.65 对数阶

2.66 平方阶

2.7 常见的时间复杂度

2.8 算法空间复杂度


 程序设计=数据结构+算法

一、数据结构绪论

1.1 基本概念和术语

1.11 数据

数据(data):

是事实或观察的结果,是对客观事物的逻辑归纳,是用于表示客观事物的未经加工的原始素材。数据可以是连续的值,比如声音、图像,称为模拟数据;也可以是离散的,如符号、文字,称为数字数据。在计算机系统中,数据以二进制信息单元0、1的形式表示。

也就是说,这里所说的数据其实就是符号,且这些符号有两个前提:

·可以输入到计算机中

·能被计算机处理

1.12 数据元素

数据元素(Data Element):

是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。在有些情况下,数据元素也称为元素、记录等。数据元素用于完整地描述一个对象,如前一节示例中的一名学生记录,树中棋盘的一个格局(状态),以及图中的一个顶点等。

1.13 数据项

数据项(Data Item):

是组成数据元素的、有独立含义的、不可分割的最小单位。例如,学生基本信息表中的学号、姓名、性别等都是数据项。

1.14 数据对象

数据对象(Data Object):
是性质相同的数据元素的集合,是数据的一个子集。例如:整数数据对象是集合N={0,±1,+2,…},字母字符数据对象是集合C={'A','B',…,Z' ,'a', 'b',…,'z'},学生基本信息表也可以是一个数据对象。由此可以看出,不论数据元素集合是无限集(如整数集),或是有限集(如字母字符集),还是由多个数据项组成的复合数据元素(如学生表)的集合,只要集合内的性质均相同,都可称之为一个数据对象。

1.15 数据结构

不同的数据元素之间不是独立的,而是存在特定的关系,我们将这种关系称为结构。
数据结构是相互之间存在一种或多种特定关系的数据元素的集合。
那具体什么关系?往下看

1.2 逻辑结构和物理结构

1.21 逻辑结构

是指数据对象中数据元素之间的互相关系。

(以下图片每一个结点就代表一个数据元素)

1.集合结构

集合结构中的数据结构除了同属于一个集合外,他们之间没有其他的关系
他们是“平等”的。

2.线性结构

线性结构中的数据元素之间是1对1的关系。

3.树形结构

树形结构中的数据元素之间存在1对多的层次关系。

4.图形结构

图像结构的数据元素是多对多的关系

我们在用示意图表示数据的逻辑结构时,要注意两点:

·将每个数据元素看做一个结点,用圆圈表示。
·元素之间的逻辑关系用节点之间的连线表示,如果这个关系是有方向的,那么用带箭头的连线表示。

1.22 物理结构(存储结构)

是指数据的逻辑结构在数据在计算机中的存储形式
就是如何把数据元素存储到计算机的存储器(内存)中。
存储结构反映着数据元素之间的逻辑关系,如何存储数据元素之间的逻辑关系,是实现物理结构的重点和难点。

1.顺序存储结构

把数据元素存放到地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的

“排队占位”
数组就是这样的顺序存储结构

比如要建一个9个整形数据的数组时,计算机就在内存中找了片空地,按照一个整形所占的位置*9,开辟一段连续的空间,第一个数组放在第一个位置上,依次排放。

2. 链式存储结构

但实际上总是有人“插队、上厕

所、放弃排队”处在一种变化的队形当中
对应的有一种方法 :叫号
把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。
这时存储关系不能反映其逻辑关系,因此需要“一个指针存放数据元素的地址”,这样通过地址就能找到相关联数据元素的位置。

显然,链式结构就灵活多了,数据存在哪里不重要,只要有一个指针存放了相应的地址就能找到它了。

1.3抽象数据类型

1.31数据类型

是指一组性质相同的值的集合及定义在此集合上的一些操作的总称。
数据类型是按照值的不同进行划分的。每个变量、常量和表达式都有各自的取值范围。
类型就是用来说明变量或表达式的取值范围和所能进行的操作。

在C语言中按照取值的不同,数据类型可以分为两大类:
原子类型:不可再分的基本类型。整形、实行、字符型等。
结构类型:由若干个类型组合而来,是可以再分割的。整形数组是由若干整形数据组成的。

计算机的内部硬件系统不同,可能运作方式不同。但是编程语言操作都一样(就是抽象的结果)

抽象就是指抽取出事务具有的普遍性的本质。
抽象是一种思考问题的方式,它隐藏了繁杂的细节,只保留实现目标所必需的信息。

1.32抽象数据类型

对已有的数据类型进行抽象
是指一个数学模型及定义在该模型上的一组操作。
取决于它的一组逻辑特征,而与其在计算机内如何表示和实现无关。

“整形”就是一个抽象数据类型。抽象的意义在于数据类型的数学抽象特征。 还可以是编程者在设计程序时自己定义的数据类型。ponit来表示X、Y、Z 还可以表示定义在该模型上的一组操作。“马里奥”走、跑、跳。

抽象数据类型体现了程序设计中的问题分解、抽象和信息隐藏的特性。
他将实际生活中的问题分解为多个规模小且容易处理的问题,然后建立一个计算机能处理的数据模型,并把每个功能模块的实现细节作为一个独立的单元,从而使具体实现过程隐藏起来。

抽象数据类型的标准格式:

二、算法

2.1 两种算法的比较

计算1+2+3+……+100
第一种:for循环

但是真的好吗?高效吗?
第二种:高斯求和

高斯的方法不仅可以用于1加到100,还可以加到一千、一万、一亿(需要更改数据类型为长整型,否则会溢出)

2.2 算法的定义

算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且篾条志玲表示一个或多个操作。

2.3 算法的特性

2.31 输入输出

算法具有0个或多个输入。至少有一个或多个输出。可以是打印也可以是返回一个或多个值。

2.32 有穷性

是指算法在执行有限的步骤之后,自动结束而不会出现无线循环,并且每一个步骤都在可接受的时间内完成。

2.33 确定性

算法的每一步都有具体确定的含义,不会出现二义性。
在一定条件下,只有一条执行路径,相同的输入只能有唯一的输出结果。每个步骤被精确定义而无歧义。

2.34 可行性

算法的每一步都必须是可行的,也就是说,每一步都能够通过执行有限次数完成。
可行性是算法可以转化为程序上机运行,并得到正确的结果。

2.4 算法设计的要求

2.41 正确性

是指算法至少应该具有输入、输出和加工处理无歧义性、能正确反映问题的需求、能够得到问题的正确答案。

正确应该有4个层次
1.算法程序无语法错误
2.对于合法的输入数据能够产生满足要求的输出结果
3.对于非法的数据能够得出满足规格说明的结果
4. 对于精心选择的,甚至刁难的测试数据都有满足要求的输出结果

算法的正确性大部分情况下都不可能用程式来证明,而用数学方法证明。一般情况下我们把层次3作为一个算法是否正确的标准

2.42 可读性

算法设计的另一目的是为了便于阅读、理解和交流。

2.43 健壮性

当输入数据不合法时,算法也能做出相关的处理,而不是产生异常或莫名其妙的结果

2.44 时间效率高和存储量低

执行时间短的效率高。
存储量需求指算法在执行过程中需要的最大存储空间,主要指算法程序运行时所占用的内存或外部硬件存储空间。
用最少的存储空间,最少的时间,办同样的事就是好算法。

2.5 函数的渐进增长

某个算法,随着n的增大,它会越来越优于另一算法或者越来越差。

2.6 算法时间复杂度

2.61算法时间复杂度定义

2.62 推导大O阶方法

2.63 常数阶

不管常数时多少都是O(1)
对于单纯分支结构(不包含在循环结构中),无论真假,执行的次数都是一定的,不会随着n的变大而变大,其时间复杂度也是O(1)

2.64 线性阶

线性阶的循环结构 需要确定某个特定语句或某个语句集运行的次数,关键要分析循环结构的运行情况。

2.65 对数阶

每次count乘以2之后,就距离n更近了一分。也就是说,有多少个2相乘后大于n,则会退出循环。由所以这个循环的时间复杂度为

2.66 平方阶

那我们推导大O阶的方法,第一条,没有加法常数考虑;第二条,只保留最高阶项,因此保留n²/2;第三条,去除这个相乘的常数,也就是去除1/2,最终这段代码的时间复杂度为O(n²)。

2.7 常见的时间复杂度

2.8 算法空间复杂度

用空间来换取时间

  • 16
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值