您的位置:首页 > 其它

算法之时间复杂度和空间复杂度

2013-10-13 21:41 316 查看
算法之时间复杂度和空间复杂度

时间复杂度的定义

一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n))为算法的渐进时间复杂度(O是数量级的符号 ),简称时间复杂度。

根据定义,可以归纳出基本的计算步骤

1. 计算出基本操作的执行次数T(n)

基本操作即算法中的每条语句(以;号作为分割),语句的执行次数也叫做语句的频度。在做算法分析时,一般默认为考虑最坏的情况。

2. 计算出T(n)的数量级

求T(n)的数量级,只要将T(n)进行如下一些操作:

忽略常量、低次幂和最高次幂的系数

令f(n)=T(n)的数量级。

3. 用大O来表示时间复杂度

当n趋近于无穷大时,如果lim(T(n)/f(n))的值为不等于0的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n))。



一个示例:

int num1, num2;
for(int i=0; i<n; i++){
   num1 += 1;
   for(int j=1; j<=n; j*=2){
         num2 += num1;
     }
}


以上步骤可以简化为:

1. 找到执行次数最多的语句

2. 计算语句执行次数的数量级

3. 用大O来表示结果

继续以上述算法为例,进行分析:

1.

执行次数最多的语句为num2 += num1

2.

T(n) = n*log2n

f(n) = n*log2n

3.

// lim(T(n)/f(n)) = 1

T(n) = O(n*log2n)

空间复杂度定义:

一般情况下是不考虑空间复杂度的,空间复杂度并不是指所有的数据所占用的空间,而是使用的辅助空间的大小,比如两个矩阵的运算,在中间设置了一个中间矩阵来保存一些数据,这些空间叫做空间复杂度。空间复杂度的运算非常麻烦,一般简单的算法空间复杂度都是O(1),比较复杂的会告知空间复杂度,记住就好了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐