立即学习:https://edu.csdn.net/course/play/29510/420447?utm_source=blogtoedu
数据结构初识
线性(用线串起来的数据结构)——增加容易,查找复杂。
用格子分开的数据结构——查找容易,增加复杂。
算法复杂度分析(一)
大O统计法的使用
代码的高效:时间复杂度尽可能低,空间复杂度尽可能小
事后统计法和大O统计法的对比
大O统计法计算方式:
- CPU执行代码的逻辑步骤:读取数据 > 运算 > 写数据
- 假设每行代码执行时间一样,及做一个单位时间 unit_time
- 将所有代码执行时间设为T(n),T(n)与每行代码执行次数成正比,可得一个关系式。
【例】
算法一:
sum = 0;//1 * unit_time
for(i = 1; i<=n; i++){//n * unit_time
sum = sum + (-1)^n; //n * unit_time
}
每行代码所需要的时间记为unit_time
第一行:1 * unit_time
第二行:n * unit_time
第三行:n * unit_time
一共需要:(2n + 1) * unit_time
算法二:
sum = 0;
for(i = 1; i <= n; i++){
for(j = 1; j<=n; j++){
sum = i + j + sum
}
}
每行代码所需要的unit_time:
第一行:1 * unit_time
第二行:n * unit_time
第三行:n * n * unit_time
第四行:n * n * unit_time
一共需要 (2n^2 + n + 1) unit_time
将unit_time当作一个标准量,忽略真实值
所有代码执行时间T(n)与每行代码的执行次数n成正比
大O统计法公式:T(n) = O(f(n))
T(n)代表代码执行时间;
n代表数据规模;
f(n)代表每行代码执行次数总和;
O代表T(n)与f(n)成正比;
用大O时间复杂度表示法:
算法一:T(n)=O(2n+1), 算法二:T(n)=O(2n^2+n+1)
大O时间复杂度并不具体表示代码真正的执行时间,代表的是代码执行时间随数据规模增长的变化趋势,所以也叫渐进时间复杂度,简称时间复杂度
当n很大时(甚至无穷大),公式中的低阶项、常量、系数三部分并不能左右趋势走向,所以这三部分都可以忽略,只需要记录一个最大量级就可以
爆炸曲线 2n^2 + n + 1