说明:我自己的复盘的资料复习笔记。全部的知识点是基于王道408考研书和视频和落晴以及一位学长的笔记(经过允许的情况下)
1.考试要求、知识框架
考纲要求:算法时间复杂度和空间复杂度的分析与计算
知识框架(总体框架)
复习提示:
1.初步了解数据结构的基本内容和基本方法。
2.分析算法的时间复杂度和空间复杂度。(熟练掌握)
3.出题点:算法设计题通常都会要求分析时间复杂度、空间复杂度,同时会出现考查时间复杂度的选择题。
常考点(记忆知识点):
2数据结构的基本概念
总体导图:
基本
数据
- 数据是信息的载体,不仅包括整型、实型等数值类型,还包括符号(ASCII码)、声音、图像(RGB像素点)、视频等非数值类型。数据是计算机程序加工的原料。
- 是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别和处理(意思是0和1的运算)的符号的集合
额外补充(了解即可)
早期的计算机和现在的计算机处理数据的区别
数据对象
- 相同性质的数据元素的集合,是数据的一个子集。如,整数数据对象是集合N={0,±1,±2,...}
特别说明:
2.1数据结构
- 是相互之间存在一种或多种特定关系的数据元素的集合。在任何问题中,数据元素都不是孤立存在的,它们之间存在某种关系,这种数据元素相互之间的关系称为结构。
数据结构包括三方面的内容,有了这三方面的内容就定义了一个完整的数据结构
2.1.1逻辑结构:
是指数据对象中数据元素之间的相互关系。是面向问题分类的。
- 集合结构:唯一的关系就是一些数据元素同属一个集合。
- 线性结构:数据元素之间单线联系,数据元素有唯一的前驱和后继。
- 树形结构:数据元素之间是一对多的关系,只保证有唯一的前驱。
- 图形结构:数据元素之间是多对多的关系。
2.1.2物理结构:
又称存储结构,是指数据的逻辑结构在计算机中的存储方式。是面向计算机分类的。
A.分类
- 顺序存储:把数据元素放在数组这样的地址连续的存储单元里。其间的逻辑关系通常由物理关系体现。
- 链式存储:把数据元素放在任意的存储单元里。其间的逻辑关系由数据元素中的指针数据项表示。
- 索引存储:在存储元素信息的同时,还建立附加的索引表。索引表中的每项称为索引项,索引项的一般形式是(关键字,地址)。
- 散列存储:根据元素的关键字直接计算出该元素的存储地址,又称哈希存储。
B.总结(按存储方式总结)
C.物理存储的概念总结:
D.优缺点分析
关键字:数据元素中可以标识元素的某个数据项的值。主关键字可以唯一标识一个记录,次关键字可以识别若干记录
2.1.3数据的运算
施加在数据上的运算包括运算的定义和实现。运算的定义是针对逻辑结构的,指出运算的功能;运算的实现是针对存储结构的,指出运算的具体操作步骤
2.2数据类型
数据类型:数据类型是一个值的集合和定义在此集合上的一组操作的总称。
- 原子类型:其值不可再分的数据类型。
- 结构类型:其值可以再分解为若干成分(分量)的数据类型。
- 抽象数据类型:抽象数据组织及与之相关的操作。定义一个抽象数据类型就是定义了一个完整的数据结构。
3.算法和算法评价
注(辨析):算法一定是有穷的,程序不一定是有穷的。
3.1概念
有了数据结构,就可以对存储的数据进行操作解决问题,就是算法。程序=数据结构+算法
算法定义:解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列 ,其中每条指令表示一个或多个操作。
算法的特性(五个):
- 有穷性。一个算法必须总在执行有穷步之后结束,且每一步都可在有穷时间内完成。算法是有穷的,程序可以是无穷的。
- 确定性。算法中每条指令必须有确切的含义,对于相同的输入只能得出相同的输出。
- 可行性。算法中描述的操作都可以通过已经实现的基本运算执行有限次来实现。
- 输入。一个算法有零个或多个输入,这些输入取自于某个特定的对象的集合。
- 输出。一个算法有一个或多个输出,这些输出是与输入有着某种特定关系的量。
“好”算法的特质:
- 正确性。能够正确地解决问题。
- 可读性。有较好注释,帮助人们理解。
- 健壮性。输入非法数据时,算法能适当地做出反应或进行处理,而不会产生莫名其妙的输出结果。
- 高效率与低存储量需求。效率是指算法执行的时间,存储量需求是指算法执行过程中所需要的最大存储空间,这两者都与问题的规模有关。
3.2时间复杂度
在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。
时间复杂度:T(n)=O(f(n))。它表示随着问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同。
这种方法叫大O渐进法表示时间复杂度,推导大O阶的方法为:
- 用常数1取代运行时间中的所有加法常数。
- 推导过程中保留各步骤的运行次数,最后只留下最高阶项,并把最高阶项系数置为1。
没有特殊说明情况下,时间复杂度求的都是最坏时间复杂度。
常见的时间复杂度的代码理解
注:
3.3空间复杂度
- 空间复杂度:O(f(n)),n为问题的规模,f(n)为语句关于n所占存储空间的函数。
由于要分析算法的效率,所以空间复杂度算的是除输入和程序之外的额外空间,空间复杂度为O(1)称此算法是原地工作。
常见的空间复杂度的代码理解
注:函数调用栈(琐碎知识点)
3.4计算方法
考频分析:此章内容是数据结构的基础,其考点固定为时间复杂度分析,其中选择题的模型历年基本不同,故二轮(挖坑)应该搜集时间复杂度题目总结所有可能考法,避免在这种基础题上对函数模型不清晰而失分。(二轮在这种题型上要在大题中进行训练)