- 浏览: 3566843 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (1491)
- Hibernate (28)
- spring (37)
- struts2 (19)
- jsp (12)
- servlet (2)
- mysql (24)
- tomcat (3)
- weblogic (1)
- ajax (36)
- jquery (47)
- html (43)
- JS (32)
- ibatis (0)
- DWR (3)
- EXTJS (43)
- Linux (15)
- Maven (3)
- python (8)
- 其他 (8)
- JAVASE (6)
- java javase string (0)
- JAVA 语法 (3)
- juddiv3 (15)
- Mule (1)
- jquery easyui (2)
- mule esb (1)
- java (644)
- log4j (4)
- weka (12)
- android (257)
- web services (4)
- PHP (1)
- 算法 (18)
- 数据结构 算法 (7)
- 数据挖掘 (4)
- 期刊 (6)
- 面试 (5)
- C++ (1)
- 论文 (10)
- 工作 (1)
- 数据结构 (6)
- JAVA配置 (1)
- JAVA垃圾回收 (2)
- SVM (13)
- web st (1)
- jvm (7)
- weka libsvm (1)
- weka屈伟 (1)
- job (2)
- 排序 算法 面试 (3)
- spss (2)
- 搜索引擎 (6)
- java 爬虫 (6)
- 分布式 (1)
- data ming (1)
- eclipse (6)
- 正则表达式 (1)
- 分词器 (2)
- 张孝祥 (1)
- solr (3)
- nutch (1)
- 爬虫 (4)
- lucene (3)
- 狗日的腾讯 (1)
- 我的收藏网址 (13)
- 网络 (1)
- java 数据结构 (22)
- ACM (7)
- jboss (0)
- 大纸 (10)
- maven2 (0)
- elipse (0)
- SVN使用 (2)
- office (1)
- .net (14)
- extjs4 (2)
- zhaopin (0)
- C (2)
- spring mvc (5)
- JPA (9)
- iphone (3)
- css (3)
- 前端框架 (2)
- jui (1)
- dwz (1)
- joomla (1)
- im (1)
- web (2)
- 1 (0)
- 移动UI (1)
- java (1)
- jsoup (1)
- 管理模板 (2)
- javajava (1)
- kali (7)
- 单片机 (1)
- 嵌入式 (1)
- mybatis (2)
- layui (7)
- asp (12)
- asp.net (1)
- sql (1)
- c# (4)
- andorid (1)
- 地价 (1)
- yihuo (1)
- oracle (1)
最新评论
-
endual:
https://blog.csdn.net/chenxbxh2 ...
IE6 bug -
ice86rain:
你好,ES跑起来了吗?我的在tomcat启动时卡在这里Hibe ...
ES架构技术介绍 -
TopLongMan:
...
java public ,protect,friendly,private的方法权限(转) -
贝塔ZQ:
java实现操作word中的表格内容,用插件实现的话,可以试试 ...
java 读取 doc poi读取word中的表格(转) -
ysj570440569:
Maven多模块spring + springMVC + JP ...
Spring+SpringMVC+JPA
时间复杂度和空间复杂度
分类: Algorithm
2008-06-18 20:45 4538人阅读 评论(2) 收藏 举报
【摘】时间复杂度和空间复杂度
2007-09-16 13:431、时间复杂度 (1)时间频度 一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度或时间频度。记为T(n)。 (2)时间复杂度 在刚才提到的时间频度中,n称为问题的规模,当n不断变化时,时间频度T(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),另外,在时间频度不相同时,时间复杂度有可能相同,如T(n)=n2+3n+4与T(n)=4n2+2n+1它们的频度不同,但时间复杂度相同,都为O(n2)。 按数量级递增排列,常见的时间复杂度有:常数阶O(1),对数阶O(log2n),线性阶O(n), 线性对数阶O(nlog2n),平方阶O(n2),立方阶O(n3),..., k次方阶O(nk),指数阶O(2n)。随着问题规模n的不断增大,上述时间复杂度不断增大,算法的执行效率越低。 2、空间复杂度 与时间复杂度类似,空间复杂度是指算法在计算机内执行时所需存储空间的度量。记作: S(n)=O(f(n)) 我们一般所讨论的是除正常占用内存开销外的辅助存储单元规模。讨论方法与时间复杂度类似,不再赘述。
(3)渐进时间复杂度评价算法时间性能 主要用算法时间复杂度的数量级(即算法的渐近时间复杂度)评价一个算法的时间性能。【例3.7】有两个算法A1和A2求解同一问题,时间复杂度分别是T1(n)=100n2,T2(n)=5n3。(1)当输入量n<20时,有T1(n)>T2(n),后者花费的时间较少。(2)随着问题规模n的增大,两个算法的时间开销之比5n3/100n2=n/20亦随着增大。即当问题规模较大时,算法A1比算法A2要有效地多。它们的渐近时间复杂度O(n2)和O(n3)从宏观上评价了这两个算法在时间方面的质量。在算法分析时,往往对算法的时间复杂度和渐近时间复杂度不予区分,而经常是将渐近时间复杂度T(n)=O(f(n))简称为时间复杂度,其中的f(n)一般是算法中频度最大的语句频度。【例3.8】算法MatrixMultiply的时间复杂度一般为T(n)=O(n3),f(n)=n3是该算法中语句(5)的频度。下面再举例说明如何求算法的时间复杂度。 【例3.9】交换i和j的内容。 Temp=i; i=j; j=temp; 以上三条单个语句的频度均为1,该程序段的执行时间是一个与问题规模n无关的常数。算法的时间复杂度为常数阶,记作T(n)=O(1)。 如果算法的执行时间不随着问题规模n的增加而增长,即使算法中有上千条语句,其执行时间也不过是一个较大的常数。此类算法的时间复杂度是O(1)。 【例3.10】变量计数之一。 (1) x=0;y=0; (2) for(k-1;k<=n;k++) (3) x++; (4) for(i=1;i<=n;i++) (5) for(j=1;j<=n;j++) (6) y++; 一般情况下,对步进循环语句只需考虑循环体中语句的执行次数,忽略该语句中步长加1、终值判别、控制转移等成分。因此,以上程序段中频度最大的语句是(6),其频度为f(n)=n2,所以该程序段的时间复杂度为T(n)=O(n2)。 当有若干个循环语句时,算法的时间复杂度是由嵌套层数最多的循环语句中最内层语句的频度f(n)决定的。 【例3.11】变量计数之二。 (1) x=1; (2) for(i=1;i<=n;i++) (3) for(j=1;j<=i;j++) (4) for(k=1;k<=j;k++) (5) x++; 该程序段中频度最大的语句是(5),内循环的执行次数虽然与问题规模n没有直接关系,但是却与外层循环的变量取值有关,而最外层循环的次数直接与n有关,因此可以从内层循环向外层分析语句(5)的执行次数: 则该程序段的时间复杂度为T(n)=O(n3/6+低次项)=O(n3)。 (4)算法的时间复杂度不仅仅依赖于问题的规模,还与输入实例的初始状态有关。 【例3.12】在数值A[0..n-1]中查找给定值K的算法大致如下: (1)i=n-1; (2)while(i>=0&&(A[i]!=k)) (3) i--; (4)return i; 此算法中的语句(3)的频度不仅与问题规模n有关,还与输入实例中A的各元素取值及K的取值有关: ①若A中没有与K相等的元素,则语句(3)的频度f(n)=n; ②若A的最后一个元素等于K,则语句(3)的频度f(n)是常数0。 (5)最坏时间复杂度和平均时间复杂度 最坏情况下的时间复杂度称最坏时间复杂度。一般不特别说明,讨论的时间复杂度均是最坏情况下的时间复杂度。 这样做的原因是:最坏情况下的时间复杂度是算法在任何输入实例上运行时间的上界,这就保证了算法的运行时间不会比任何更长。【例3.19】查找算法【例1·8】在最坏情况下的时间复杂度为T(n)=0(n),它表示对于任何输入实例,该算法的运行时间不可能大于0(n)。 平均时间复杂度是指所有可能的输入实例均以等概率出现的情况下,算法的期望运行时间。 常见的时间复杂度按数量级递增排列依次为:常数0(1)、对数阶0(log2n)、线形阶0(n)、线形对数阶0(nlog2n)、平方阶0(n2)立方阶0(n3)、…、k次方阶0(nk)、指数阶0(2n)。显然,时间复杂度为指数阶0(2n)的算法效率极低,当n值稍大时就无法应用。 类似于时间复杂度的讨论,一个算法的空间复杂度(Space Complexity)S(n)定义为该算法所耗费的存储空间,它也是问题规模n的函数。渐近空间复杂度也常常简称为空间复杂度。算法的时间复杂度和空间复杂度合称为算法的复杂度。
发表评论
-
java 回溯法求解 8皇后问题
2012-02-14 07:51 4497package endual; public cl ... -
算法设计与分析_回溯法分析
2012-02-12 09:53 2393回溯法 有通用的解题 ... -
经典而简单的贪心算法
2012-02-10 18:23 2036package endual; public cl ... -
贪心算法的一些感悟
2012-02-10 15:42 2418每一个贪心算法的背后 ... -
java排序算法的实现(转载)
2012-01-31 23:12 1485插入排序: package org.rut. ... -
计算时间和空间复杂度
2012-02-02 13:37 1760计算时间和空间复杂度 分类: C++学习 2 ... -
java 实现二叉树
2012-01-25 21:13 1470在计算机科学中,树是一种非常重要的数据结构,而且有非常广泛的应 ... -
java实现队列
2012-01-25 21:10 1568队列是一种重要的数据结构,在排队论和算法设计中有很重要的应用, ... -
java 栈(面试够了的)
2012-01-25 21:07 1576package endual;public class Sta ... -
java 栈的实现
2012-01-25 20:38 1420栈可以说是一种特殊的链表,它的主要特点是先进后出,是一种重要的 ... -
求解算法的时间复杂度的具体步骤
2012-01-25 19:14 1664求解算法的时间复杂度 ... -
常用的排序算法的时间复杂度和空间复杂度
2012-01-24 23:03 2489常用的排序算法的时间复杂度和空间复杂度 分类: 笔试面试题 ... -
时间复杂度和空间复杂度
2012-01-24 22:18 1983同一问题可用不同 ... -
海量数据算法笔试题
2012-01-21 01:58 1594海量数据算法笔 ... -
[转]大数据量,海量数据 处理方法总结
2012-01-21 01:57 1225[转]大数据量,海量数据 处理方法总 ... -
时间复杂度的计算
2012-01-17 22:54 1366算法复杂度是在《数据 ... -
算法分类(按照效率降序排列)
2011-09-13 21:09 16731.常数级、 2.对数级 3.次线性级 4.线性级 5 ...
相关推荐
对时间复杂度和空间复杂度进行超级详细的讲解
算法的时间复杂度和空间复杂度 算法的时间复杂度和空间复杂度是衡量算法性能的两个重要指标。时间复杂度是指执行算法所需要的计算工作量,而空间复杂度则是指执行这个算法所需要的内存空间。 稳定排序和非稳定排序...
对java的8种排序方法的空间复杂度和时间复杂度,进行了一个简单的统计
"学习电脑信息常用的排序算法的时间复杂度和空间复杂度" 时间复杂度是指算法执行所耗费的时间,它是算法中语句执行次数的函数,用 T(n) 表示。时间复杂度是评价算法时间性能的重要指标。常见的时间复杂度有:常数阶...
在信息学奥赛中,算法的时间复杂度和空间复杂度是衡量算法效率的重要指标,尤其对于青少年编程者来说,理解并掌握这两点至关重要。算法效率分析主要包括时间效率和空间效率,它们分别对应于时间复杂度和空间复杂度的...
### 数据结构中的时间复杂度与空间复杂度 #### 引言 数据结构和算法是编程领域的核心组成部分。数据结构指的是组织、管理和存储数据的方式,而算法则是解决特定问题的一系列步骤。两者之间的关系紧密,相互依赖。...
### 算法复杂度详解:时间复杂度与空间复杂度 #### 一、时间复杂度 **1.... 在讨论算法效率时,我们通常... - 通过对算法的时间复杂度和空间复杂度进行分析,我们可以更好地理解算法的工作原理,并据此优化算法的设计。
在计算机科学中,算法的时间复杂度和空间复杂度是衡量算法效率的重要指标。时间复杂度主要关注算法执行所需时间的增长速度,而空间复杂度则关注算法执行过程中内存使用的程度。理解这两个概念对于优化代码和设计高效...
算法复杂度分为时间复杂度和空间复杂度。 其作用: 时间复杂度是指执行算法所需要的计算工作量; 而空间复杂度是指执行这个算法所需要的内存空间。 (算法的复杂性体现在运行该算法时的计算机所需资源的多少上,...
时间复杂度和空间复杂度,大O表示法【数据结构和算法入门2】
时间复杂度和空间复杂度.url
Python实现二分查找和哈希查找的示例代码及其时间复杂度和空间复杂度的分析 二分查找算法是搜索排序数组中某个元素的常用算法。其实现思路是,首先找到数组的中间元素,然后与要查找的元素比较,如果中间元素小于要...
算法讲解007【入门】时间复杂度和空间复杂度
算法设计目标与时间复杂度与空间复杂度.ppt
1. 题目应涵盖常见的算法概念和技术,如数组、算法、数据结构等。 2. 解析每道题应详细解释算法的原理、实现过程、时间复杂度和空间复杂度等。 3. 题目和解析应清晰、简洁,易于理解
算法基础知识点 算法基础是计算机科学中的一门重要课程,它是解决问题...算法基础是计算机科学中的一门重要课程,它包括算法概念、时间复杂度、空间复杂度和递归等内容。理解这些概念对于设计高效的算法是非常重要的。
【时间复杂度与空间复杂度】 在计算机科学中,算法的效率分析是评估其性能的重要手段,主要包括两个方面:时间复杂度和空间复杂度。 1. **时间复杂度** - **时间复杂度概念**:它描述了一个算法在处理问题时所需...