时间复杂度与空间复杂度讲解

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的增大,其他内容永远比不上它的最大次数,得出
【5
n^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;

以上是关于时间复杂度与空间复杂度讲解的主要内容,如果未能解决你的问题,请参考以下文章

算法 | 复杂度与计数排序

时间复杂度和空间复杂度计算方式

时间复杂度与空间复杂度讲解

时间复杂度与空间复杂度讲解

数据结构C语言 《一》斐波那契数 时间,空间复杂度详述

算法入门什么是时间复杂度和空间复杂度,最优解