含义
T(time) 时间复杂度:T(n)定义为任何大小的输入n所需的最大运行时间,但实际上的时间复杂度数值表示的是算法执行次数(给次数是不是便于不同配置的计算机算时间?哈哈)
S(space)空间复杂度: S(n)定义为任何大小的输入n所需的最大运行空间,包括1.程序本身所占空间。2.输入数据所占空间。3.辅助变量所占空间。
表示方法
T(n)=O(XXXXX)
S(n)=O(XXXXX)
【注】:时间复杂度是T(n),空间复杂度是S(n),n表示任何大小的输入n,O是一种级数表示法。
① 大写O,在计算机科学上用来表示函数的级数,通常称为“大O符号”。
②大写O既不代表空间复杂度也不代表空间复杂度;只是数学表示声明(此为级数表示法)。
如何计算——
时间复杂度:
看懂了吗,over.
再来一道:
附注:
T
(
n
)
=
O
(
f
(
n
)
)
=
O
(
n
3
)
T(n)=O(f(n))=O(n^{3})
T(n)=O(f(n))=O(n3)解释
在上面计算中遇到的问题:
1
2
+
2
2
+
…
+
n
2
=
n
(
n
+
1
)
(
2
n
+
1
)
/
6
1^{2}+2^{2}+…+n^{2}=n(n+1)(2n+1)/6
12+22+…+n2=n(n+1)(2n+1)/6
over!
空间复杂度计算
void fun(int a[],int n,int k)
2 //数组a共有n个元素
3 { int i;
4 if (k==n-1)
5 for (i=0;i<n;i++)
6 printf(“%d\n”,a[i]); //执行n次
7 else
8 { for (i=k;i<n;i++)
9 a[i]=a[i]+i*i; //执行n-k次
10 fun(a,n,k+1);
11 }
12 }
S(n) = O(g(1*n))
此方法属于递归算法,每次调用本身都要分配空间,fun(a,n,0)的空间复杂度为O(n)。