时间复杂度与空间复杂度讲解
Posted 栗子~~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了时间复杂度与空间复杂度讲解相关的知识,希望对你有一定的参考价值。
文章目录
前言
如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。
而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!
时间复杂度与空间复杂度讲解
01 时间复杂度
01::01 概述
时间复杂度的计算描述算法的运行时间,即时间增长的趋势,其中一段代码的总执行次数用T(n)表示。
T(n)-是代表执行多少次语句;
O(n)-简化的估算值(时间复杂度);
01::02 计算
01::02::01 例子:
public int test(int n)
for(int i=0;i<n;i++)
printf(i);
return 0;
其中:
int i=0 ---> 执行1次
i<n ---> 执行n+1次
i++ ---> 执行n次
printf(i) ---> 执行n次
return 0 ---> 执行1次
因此调用一次test方法的总执行次数为:T(n) = 3n + 3;
01::02::02 T(n) 如何得出 O(n)?
1、T(n) = 常数;
答案:
1)如果T(n)的执行次数为常数的话,时间复杂度可以直接估算为【1】;
2)即O(1);
2、T(n) = 常数*n + 常数;
答案:
1)去掉后面的常数,因为随着n的增大,前面越来愈大,后面值是不变的,相当于常数部分不存在,直接省略,得出【常数n】;
2)常数可以直接估算为1,所以它的时间复杂度是
【n】------------------>即O(n);
3、T(n) = 5n^3 + 9090*n^2 +78;
答案:
1)对于多项式来说,只要保留n的最高次方即可,因为随着n的增大,其他内容永远比不上它的最大次数,得出
【5n^3】;
2)常数可以直接估算为1,所以它的时间复杂度是
【n^3】------------------>即O(n ^3);
01::03 总结
时间复杂度的表示方法就是如果T(n)是常数的话,那么时间复杂度就是O(1),
否则保留T(n)的最高次项并且去掉最高次项的系数。
例子:
当T(n) = n + (n-2) + (n-1) + ……+2 + 1时,O(n)等于多少?
解:
T(n) = n + (n-2) + (n-1) + ……+2 + 1
= n*(n+1)/2
= n^2/2 + n/2
= O(n^2)
02 空间复杂度
02::01 概述:
空间复杂度描述内存空间增长的趋势。
02::02 常用的空间复杂度,O(1)、O(n)、O(n^2)
例:O(1):
int i = 0;
ing j = 0;
i++;
j++;
这段代码需要的空间就是一个常数量,i,j在大,也不会影响内存的空间分配,所以是O(1)。
例:O(n):
int [] newArray = new int[n];
for(int i=0;i<n;i++)
newArray [i] = i ;
这段代码影响空间内存的因素取决于newArray的长度,随着newArray长度越高,空间复杂度越高。
例:O(n^2):
矩阵:n行、n列,内存空间增长趋势就是n*n = n^2;
以上是关于时间复杂度与空间复杂度讲解的主要内容,如果未能解决你的问题,请参考以下文章