程序的时间和空间复杂度
来源:互联网 发布:硬盘数据彻底删除软件 编辑:程序博客网 时间:2024/05/22 13:04
一、时间复杂度概念
时间复杂度是程序执行所耗费的时间,一般是通过机器进行测试,但通过理论分析也同样能够得出
两个概念:
(1)时间频度:一个算法中语句的执行次数,是一个具体的数值,通常用T(n)来表示,n代表问题的规模
(2)时间复杂度:随着n的不断变化,T(n)/f(n)逐渐趋近于一个常数,我们使用O(f(n))来表示时间复杂度
其实上面用到的就是一个等价无穷小的概念
常见的算法时间复杂度由小到大依次为:Ο(1)<Ο(log2n)<Ο(n)<Ο(nlog2n)<Ο(n2)<Ο(n3)<…<Ο(2n)<Ο(n!)
二、时间复杂度计算
(1)找出算法中的基本语句
算法中执行次数最多的那条语句就是基本语句,通常是最内层循环的循环体。
(2)计算基本语句的执行次数的数量级
只需计算基本语句执行次数的数量级,这就意味着只要保证基本语句执行次数的函数中的最高次幂正确即可,可以忽略所有低次幂和最高次幂的系数
(3)用大Ο记号表示算法的时间性能
将基本语句执行次数的数量级放入大Ο记号中。
三、程序举例
(1)O(1)的时间复杂度
这里要注意的是,不管程序有多少行语句,只要其没有涉及到可以变得n,那么他就是一个简答的程序,例如下面的程序
(2)O(n)的时间复杂度
程序前两行的时间频度是2,第4行的时间频度是n,第5行的时间频度是n,总时间频度是2n+2,时间复杂度是O(n)
- int a = 1
- int b = 2
- for(int i = 0; i < n; i++){
- a = a + b;
- b++;
- }
(3)O(log2n)的时间复杂度
程序第一行的频度是1,第三行的频度是f(n),则2^f(n)<=n, f(n)<=log2n
- int i = 1;
- while(i < n){
- i * = 2;
- }
(4)O(n2)的时间复杂度
因为O(2n2+n+1)=n2(去低阶项,去掉常数项,去掉高阶项的常参得到),所以T(n)= =O(n2);
- int sum = 0;
- for(int i = 0; i <= n; i++){
- for(int j = 0; j <= n; j++){
- sum++;
- }
- }
四、空间复杂度
空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度。一个算法在计算机存储器上所占用的存储空间,包括存储算法本身所占用的存储空间,算法的输入输出数据所占用的存储空间和算法在运行过程中临时占用的存储空间这三个方面。
- 程序的时间和空间复杂度
- 时间的复杂度和空间的复杂度
- 时间复杂度和空间复杂度的概念
- 算法的时间复杂度和空间复杂度
- 算法的时间复杂度和空间复杂度
- 算法的时间复杂度和空间复杂度
- 算法的时间复杂度和空间复杂度
- 算法的时间复杂度和空间复杂度
- 算法的时间复杂度和空间复杂度
- 算法的时间复杂度和空间复杂度
- 算法的时间复杂度和空间复杂度
- 算法的时间复杂度和空间复杂度
- 算法的时间复杂度和空间复杂度
- 算法的时间复杂度和空间复杂度
- 算法的时间复杂度和空间复杂度
- 算法的时间复杂度和空间复杂度
- 算法的时间复杂度和空间复杂度
- 算法的时间复杂度和空间复杂度
- Extjs----comboBox使用
- iReport文字自动换行设置
- STM32启动时RAM空间堆(Heap)和栈(stack)的分配
- javascript经典实例
- wxwidgets 获取系统信息
- 程序的时间和空间复杂度
- Struts2+Spring4+Hibernate4整合系列--(四)StepByStep3
- NIT
- 程序员面试金典: 9.1数组与字符串 7若M*N矩阵中某个元素为0,则将其所在行与列清零
- 基于UIWebView的混合编程
- 测试微信支付接口的恶心事情
- ROW_NUMBER() OVER函数的基本用法
- C 语言常用的预处理-宏函数
- c# ENUM 通过Description得到Value