1.1
1、数据结构基本概念
1) 数据项、数据元素、组合项
2)数据对象
具有相同性质的数据元素的集合,是数据的一个子集。
如第一个数据对象是关于财富榜的所有数据元素的集合
第二个则是关于微博账号的数据元素集合
第三个是关于海底捞排队的数据元素集合
3)数据结构
数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。
关注的是数据元素之间的关系和对这些数据元素的操作,而不关心具体的数据项内容
4)数据类型和抽象数据类型(ADT)
数据类型
(1)原子类型:其值不可再分的数据类型(如bool和int类型)
(2)结构类型:其值可以再分解成若干份的数据类型(如struct结构体可以分解成x和y两个分量)
抽象数据类型(ADT)
是抽象数据组织及与之相关的操作。
2、数据结构三要素
3、总结
1.2
1)算法的基本概念
2)算法效率的度量
空间复杂度S(n)
(1)S(n) = O(1)
当问题规模无论怎么变,算法运行所需的内存空间都是固定的常量,算法的空间复杂度就为S(n) = O(1)
(2)具体怎么算
1、
4:定义一个 int n 要4个字节
4n:数组中有n个int,一个int要4字节,即4n
4:定义一个 int i 要4个字节
故S(n) = O(4n+8) = O(n)
因为用O表示法,只关注n的阶数
2、
3、
当多个O相加时,只需取最大的O
4、函数递归调用带来的内存开销
S(n) = O(5n) = O(n)
空间复杂度 = 递归调用的深度
5、
在4、的基础上改一下,把变量改成数组
时间复杂度T(n)
(1)关于O
O表示“同阶”,同等数量级
而且相加时取最大
简单来说O就是取最高阶的值并把系数化为1
故T1(n) = O(3n + 3) = O(3n) = O(n)
T2(n) = O(n^2 + 3n + 1000) = O(n ^2)
T3(n) = O(n^3 + n ^2 + 9999999) = O(n ^3)
(2)加法规则和乘法规则
(3)常见的数量级
简单记忆:常对幂指阶
常数 < 对数 < 幂数 < 指数 < 阶数
1 < log2n < (n < n^2) < 2 ^ n < n!
(4) 快速计算的结论
1、顺序执行的代码只会影响常数项,可以忽略
2、只需挑循环中的一个基本操作分析它的执行次数与n的关系即可
故这里可只看第4行,执行n次,故T(n) = O(n)
3、如果有多层嵌套循环,只需关注最深层循环循环了多少次
(5)小练习
最后的+1,是因为循环到最后一个数的时候,还要循环一次判断,再跳出循环