常见算法的时间与空间复杂度
~~~总结一些概念便于随时查看
1.什么是时间复杂度(渐进时间复杂度)?
简单来说,时间复杂度即是一个算法运行花费的时间。
2.如何求?
问题规模为n的一个算法内基本语句执行次数记为T(n),此时另一个函数f(n),当n趋近于无穷大时T(n)/f(n)为一个不等于零的常数,则该算法的时间复杂度记为O(f(n));
f(n)越小,时间复杂度越低,算法效率越高。
1 for(i=1; i<=n; ++i) 2 { 3 for(j=1; j<=n; ++j) 4 { 5 c[i][j] = 0;//该步骤属于基本操作执行次数:n的平方次 6 for(k=1; k<=n; ++k) 7 c[i][j] += a[i][k] * b[k][j];//该步骤属于基本操作执行次数:n的三次方次 8 } 9 }
此处引用百科代码,T(n)=n3+n2,令f(n)=n3,此时T(n)/f(n)满足条件,则该代码的时间复杂度为O(n3)。
3.什么是空间复杂度(渐进空间复杂度)?
空间复杂度描述算法运行过程中临时占用的存储空间。
算法在计算机上的存储空间包括:
1)算法本身代码的存储空间;
2)算法的数据(输入输出的数据)的存储空间;
3)算法在运行过程中临时占用的存储空间;
4)如何求?
一般简单算法的空间复杂度为O(1),一般的递归算法为O(n),具体的分析需要根据算法中分配存储空间代码所处的位置(此处仅考虑代码本身的存储空间)。