参考:https://blog.csdn.net/jiaoyangwm/article/details/80808235
https://blog.csdn.net/a2392008643/article/details/81781766
https://mp.weixin.qq.com/s/vn3KiV-ez79FmbZ36SX9lg
本文仅是将他人博客经个人理解转化为简明的知识点,供各位博友快速理解记忆,并非纯原创博客,如需了解详细知识点,请查看参考的各个原创博客。
目录
第一章 数据结构
1.1 数据关系
![](https://i-blog.csdnimg.cn/blog_migrate/d8fc73cfa2f0f49a6313b06703e58684.png)
- 数据项:数据项组成数据元素,数据项是不可分割的最小单位
- 数据元素:组成数据的基本单位
- 数据对象:性质相同的数据元素的集合
- 数据:描述客观事物的符号
数据结构:相互之间存在一种或多种特定关系的数据元素的集合
1.2 逻辑结构和物理结构
逻辑结构:数据对象中数据元素的相互关系
- 逻辑结构包括:集合结构、线性结构、树形结构、图形结构
物理结构:数据的逻辑结构在计算机中的存储形式,也就是将数据元素存储到存储器
- 物理结构包括:顺序存储结构、链式存储结构
- 顺序存储结构:把数据元素存放在地址连续的存储单元,数据间逻辑关系和物理关系是一样
- 链式存储结构:把数据元素存储到任意存储单元中,这些单元可以是连续的也可以是不连续的链式存储很灵活,不用在意存储的位置,只要有一个存放地址的指针就好了。
第二章 算法
算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列。
2.1 算法特性
输入、输出、有穷性、确定性、可行性
- 输入输出:算法具有输入和输出
- 有穷性:算法不会出现无限循环,并且每个步骤可在可接受时间内完成
- 确定性:每个步骤都有确定的含义
- 可行性:算法的每一步都是可行的,也就是每一步都能够通过执行的有限次完成
2.2 算法设计要求
- 正确性、可读性、健壮性、时间效率高、存储量低
2.3 算法时间复杂度
背景:一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。
时间频度:一个算法中的语句执行次数称为语句频度或时间频度,记为T(n)。
时间复杂度:时间频度中,n称为问题的规模,当n不断变化时,时间频度T(n)也会不断变化。但有时我们想知道它变化时呈现什么规律。为此,我们引入时间复杂度概念。若有某个辅助函数f(n),存在一个正常数c使得fn*c>=T(n)恒成立,记作T(n)=O(f(n)),则称O(f(n)) 为算法的时间复杂度。
通常来说,时间复杂度的分析方法有5种方法,分别如下:
1)直接看嵌套层数
例如外层循环n次,内层循环m次,时间复杂度即为O(nm)。
2)级数嵌套求和
除了直接看嵌套层数,还可用级数嵌套求和的方式(适合嵌套变量相关的情况)
for(int i = 1; i <= n; i++)
for(int j = 1; j <= i; j++
for(int k = 1; k <= j; k++)
x = x + 1;
从语句频度推导出时间复杂度的全过程:
3)对数级复杂度
![](https://i-blog.csdnimg.cn/blog_migrate/1a8f87d1f038141c4ab9cf231b87912f.png)
4)时间复杂度会随输入数据集变化
![](https://i-blog.csdnimg.cn/blog_migrate/b922058f95e4a1fb8e5bff0aab74d502.png)
5)T(n)分解估算
![](https://i-blog.csdnimg.cn/blog_migrate/2a1260e16287fcb66e5145a4ca282b0e.png)
2.4 算法空间复杂度
空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度,记做S(n)=O(f(n))。
S(n)与辅助变量的个数有关:
![](https://i-blog.csdnimg.cn/blog_migrate/59418034bcb52eef3eaca6880aba9e8f.png)