时间复杂度和空间复杂度
2015-07-07 14:24
197 查看
时间复杂度的定义:
一 般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大 时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n))为算法的渐进 时间复杂度(O是数量级的符号),简称时间复杂度。
计算方法:
1) 算法的基本操作重复执行的次数是模块n的某一个函数f(n),因此,算法的时间复杂度记做:T(n)=O(f(n)),随着模块n的增大,算法执行的时间的增长率和f(n)的增长率成正比,所以f(n)越小,算法的时间复杂度越低,算法的效率越高。
2) 在计算时间复杂度的时候,先找出算法的基本操作,然后根据相应的各语句确定它的执行次数,再找出T(n)的同数量级(它的同数量级有以下:1,Log2n,n ,nLog2n ,n的平方,n的三次方,2的n次方,n!),找出后,f(n)=该数量级,若T(n)/f(n)求极限可得到一常数c,则时间复杂度 T(n)=O(f(n))
3) 对于f(n),忽略其常量、低次幂和最高次幂的系数,得到最高次幂的数量级即可。更简便的方法是找最内层循环语句执行次数的数量级。
例:
根据上面的方法,我们可以确定 n^3 为T(n)的同数量级,则该算法的 时间复杂度:T(n)=O(n^3)
空间复杂度的定义:
类似于时间复杂度的讨论,一个算法的空间复杂度(SpaceComplexity)S(n)定义为该算法所耗费的存储空间,它也是问题规模n的函数。渐近空间复杂度也常常简称为空间复杂度。记作S(n)=O(f(n)),其中n为问题的规模,S(n)表示空间复杂度。
计算方法:
当 一个算法的空间复杂度为一个常量,即不随被处理数据量n的大小而改变时,可表示为O(1);当一个算法的空间复杂度与以2为底的n的对数成正比时,可表示 为0(10g2n);当一个算法的空I司复杂度与n成线性比例关系时,可表示为0(n).若形参为数组,则只需要为它分配一个存储由实参传送来的一个地址 指针的空间,即一个机器字长空间;若形参为引用方式,则也只需要为其分配存储一个地址的空间,用它来存储对应实参变量的地址,以便由系统自动引用实参变量。
排序算法中的复杂度
一 般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大 时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n))为算法的渐进 时间复杂度(O是数量级的符号),简称时间复杂度。
计算方法:
1) 算法的基本操作重复执行的次数是模块n的某一个函数f(n),因此,算法的时间复杂度记做:T(n)=O(f(n)),随着模块n的增大,算法执行的时间的增长率和f(n)的增长率成正比,所以f(n)越小,算法的时间复杂度越低,算法的效率越高。
2) 在计算时间复杂度的时候,先找出算法的基本操作,然后根据相应的各语句确定它的执行次数,再找出T(n)的同数量级(它的同数量级有以下:1,Log2n,n ,nLog2n ,n的平方,n的三次方,2的n次方,n!),找出后,f(n)=该数量级,若T(n)/f(n)求极限可得到一常数c,则时间复杂度 T(n)=O(f(n))
3) 对于f(n),忽略其常量、低次幂和最高次幂的系数,得到最高次幂的数量级即可。更简便的方法是找最内层循环语句执行次数的数量级。
例:
<span style="font-size:12px;"> for(i=1;i<=n;++i) { for(j=1;j<=n;++j) { c[ i ][ j ]=0; //该步骤属于基本操作执行次数:n^2(n的平方) for(k=1;k<=n;++k) c[ i ][ j ]+=a[ i ][ k ]*b[ k ][ j ]; //该步骤属于基本操作 执行次数:n^3 } }</span>
根据上面的方法,我们可以确定 n^3 为T(n)的同数量级,则该算法的 时间复杂度:T(n)=O(n^3)
空间复杂度的定义:
类似于时间复杂度的讨论,一个算法的空间复杂度(SpaceComplexity)S(n)定义为该算法所耗费的存储空间,它也是问题规模n的函数。渐近空间复杂度也常常简称为空间复杂度。记作S(n)=O(f(n)),其中n为问题的规模,S(n)表示空间复杂度。
计算方法:
当 一个算法的空间复杂度为一个常量,即不随被处理数据量n的大小而改变时,可表示为O(1);当一个算法的空间复杂度与以2为底的n的对数成正比时,可表示 为0(10g2n);当一个算法的空I司复杂度与n成线性比例关系时,可表示为0(n).若形参为数组,则只需要为它分配一个存储由实参传送来的一个地址 指针的空间,即一个机器字长空间;若形参为引用方式,则也只需要为其分配存储一个地址的空间,用它来存储对应实参变量的地址,以便由系统自动引用实参变量。
排序算法中的复杂度
相关文章推荐
- 使用到的一些开源项目 一般根据名字都能搜出源码
- 双缓冲技术(基于GDI+实现)
- galera 源码安装
- Android错误之setAdapter(adapter)空指针nullPointer 解决办法
- 程序设计小问题
- sql server 2008 不允许保存更改,您所做的更改要求删除并重新创建以下表 的解决办法
- 《权威指南》笔记 -- 8.3 函数的实参和形参
- 探讨iOS某个像素点是否显示依据,以摸索为什么iOS没适配的应用在iphone6上面线的粗细会不稳定。有的线会变粗。
- eclipse和myeclipse反编译
- Python gevent协程
- 每天小练笔4-整数排序操作
- 【swift-总结】属性
- Linux下libevent安装与示例
- ORACLE错误一览表【转】
- route命令
- (L1)AudioService adjustStreamVolume代码走读
- SqlDateTime 溢出。必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM之间
- Unity中的mvc框架_StrangeIoC(之十)
- 如何解决idea内存溢出
- Ext-js-4.2 清空treepanel勾选