时间复杂度
- 算法的时间复杂度:算法速率的衡量
- 衡量算法效率的方法:事前分析法、事后统计法
- 时间复杂度的定义:随着问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同
T(n)=O(f(n))
f(n)指语句频度:一条语句的重复执行次数
-
时间复杂度的计算步骤:
ⅰ. 拥有最大语句频度的语句为基本语句
ⅱ. 求基本语句频度f(n)=x
ⅲ. 套用上方公式 T(n)=O(x) -
例1-求时间复杂度 [求和公式法-多循环自增]
int i,j,x=0;
for(i=1;i<n;i++) //1~(n-1)次
for(j=i+1;j<=n;j++) //(i+1)~n次
x++;
- 例2-求时间复杂度 [log型-增量不为1的情况]
int i=1;k=100;
while(i<=n)
{ k++; i+=2;} //i的增量为2
值为:1,3,5… 按规律得: 1+2T(n)
1+2T(n)<=n
T(n)<=(n-1)/2
1/2n → n (保留最高次项,去掉系数)
∴T(n)=O(n)
- 例3-求时间复杂度 [log型-自乘]
i=1;
while(i<=n) //2T(n)<=n
i=i*2
T(n)≤log2n=O(log2n)
- 例4-求时间复杂度 [综合题-多循环+自乘]
int i,j,k;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
k=1;
while(k<=n)
k=5*k
}
循环次数乘以log型结果
第一条循环n
,第二条循环n
,第三条循环log5n
,答案=n×n×log5n
T(n)=O(n²log5n)
- 常见时间复杂度比较
常对幂指阶 O(1)<O(log2n)<O(n)<O(n*log2n)<O(n²)<O(n3)<O(2n)<O(n!)<O(nn)
- 注意区别:平均时间复杂度,最大时间复杂度,最小时间复杂度
图片转载自:https://blog.csdn.net/qq_53414724/article/details/125016223
空间复杂度
-
算法的空间复杂度:算法占用内存量的衡量
-
空间复杂度:主要指辅助空间(辅助变量所占用的空间)
S(n)=O(f(n))
-
常见变量:
short
类型占2个字节,int
类型占4个字节,double
类型占8个字节
(不同的编译器或不同版本,变量所占内存大小可能会有差异)