一、算法复杂度
算法复杂度分为:时间复杂度和空间复杂度。作用: 时间复杂度是指执行算法所需要的计算工作量;而空间复杂度是指执行这个算法所需要的内存空间。
二、时间复杂度:
1、定义:用T(n)表示算法中基本操作重复执行的次数,其中的n是问题的规模。若用f(n)表示T(n)的同量级函数,则时间复杂度记为O(f(n))。
注:同量级函数的定义:若有某个函数f(n)、使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数c,则称f(n)是T(n)的同数量级函数,记作T(n)=O(f(n))。
2、计算步骤:
(1)找出算法的基本操作
(2)根据相应的语句确定该 语句的执行次数T(n)
(3)找出 T(n) 的同数量级f(n),则为时间复杂度 O(f(n)
3、常见的T(n)的同数量级f(n)有以下:
1,log2n,n,n log2n ,n^2,n^3,2^n,n!
4、时间复杂度的计算技巧:
(1)看看有几重for循环,只有一重则时间复杂度为O(n),二重则为O(n^2),依此类推;
(2)如果有二分,例如快速幂、二分查找,则为O(log2n);
(3)如果一个for循环套一个二分,那么时间复杂度则为O(nlog2n)。
5、例子:
for(i=1; i<=n; ++i) { for(j=1; j<=n; ++j) { c[i][j] = 0;//该步骤属于基本操作执行次数:n的平方次 (即n^2) for(k=1; k<=n; ++k) c[i][j] += a[i][k] * b[k][j];//该步骤属于基本操作执行次数:n的三次方次 (即n^3) } }
上面的程序中, T(n) = n^2+n^3,根据 T(n)/f(n) 求极限可得到常数c,可以确定T(n)的同数量级 f(n) = n^3,则该算法的时间复杂度:T(n) = O(n^3)
三、空间复杂度:
1、定义:
一个算法的空间复杂度S(n)定义为该算法所耗费的存储空间,包括存储算法本身所占用的存储空间,算法的输入输出数据所占用的存储空间和算法在运行过程中临时占用的存储空间这三个方面。
四、时间复杂度与空间复杂度比较
对于一个算法,其时间复杂度和空间复杂度往往是相互影响的。当追求一个较好的时间复杂度时,可能会使空间复杂度的性能变差,即可能导致占用较多的存储空间;反之,当追求一个较好的空间复杂度时,可能会使时间复杂度的性能变差,即可能导致占用较长的运行时间。
来源参考链接:
1、http://www.cnblogs.com/xiaxianfei/p/5385081.html
2、什么是时间复杂度:https://www.cnblogs.com/huangbw/p/7398418.html