排序算法时间复杂度度为O(n,)的是什么算法

12849人阅读
知识(14)
时间复杂度 算法分析 同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。一个算法的评价主要从时间复杂度和空间复杂度来考虑。 一、时间复杂度 (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)) 我们一般所讨论的是除正常占用内存开销外的辅助存储单元规模
&& 二、常见算法时间复杂度:
O(1): 表示算法的运行时间为常量
O(n): 表示该算法是线性算法
O(㏒2n): 二分查找算法
O(n2): 对数组进行排序的各种简单算法,例如直接插入排序的算法。
O(n3): 做两个n阶矩阵的乘法运算
O(2n): 求具有n个元素集合的所有子集的算法
O(n!): 求具有N个元素的全排列的算法
优&---------------------------&劣
O(1)&O(㏒2n)&O(n)&O(n2)&O(2n)
时间复杂度按数量级递增排列依次为:常数阶O(1)、对数阶O(log2n)、线性阶O(n)、线性对数阶O(nlog2n)、平方阶O(n2)、立方阶O(n3)、&&k次方阶O(nk)、指数阶O(2n)。
三、算法的时间复杂度(计算实例)
定义:如果一个问题的规模是n,解这一问题的某一算法所需要的时间为T(n),它是n的某一函数 T(n)称为这一算法的&时间复杂性&。
当输入量n逐渐加大时,时间复杂性的极限情形称为算法的&渐近时间复杂性&。
我们常用大O表示法表示时间复杂性,注意它是某一个算法的时间复杂性。大O表示只是说有上界,由定义如果f(n)=O(n),那显然成立f(n)=O(n^2),它给你一个上界,但并不是上确界,但人们在表示的时候一般都习惯表示前者。
此外,一个问题本身也有它的复杂性,如果某个算法的复杂性到达了这个问题复杂性的下界,那就称这样的算法是最佳算法。
&大O记法&:在这种描述中使用的基本参数是 n,即问题实例的规模,把复杂性或运行时间表达为n的函数。这里的&O&表示量级 (order),比如说&二分检索是 O(logn)的&,也就是说它需要&通过logn量级的步骤去检索一个规模为n的数组&记法 O ( f(n) )表示当 n增大时,运行时间至多将以正比于 f(n)的速度增长。
这种渐进估计对算法的理论分析和大致比较是非常有价值的,但在实践中细节也可能造成差异。例如,一个低附加代价的O(n2)算法在n较小的情况下可能比一个高附加代价的 O(nlogn)算法运行得更快。当然,随着n足够大以后,具有较慢上升函数的算法必然工作得更快。
Temp=i;i=j;j=&&&&&&&&&&&&&&&&&&&&
以上三条单个语句的频度均为1,该程序段的执行时间是一个与问题规模n无关的常数。算法的时间复杂度为常数阶,记作T(n)=O(1)。如果算法的执行时 间不随着问题规模n的增加而增长,即使算法中有上千条语句,其执行时间也不过是一个较大的常数。此类算法的时间复杂度是O(1)。
2.1. 交换i和j的内容
&&&& sum=0;&&&&&&&&&&&&&&&& (一次)
&&&& for(i=1;i&=n;i++)&&&&&& (n次 )
&&&&&&& for(j=1;j&=n;j++) (n^2次 )
&&&&&&&& sum++;&&&&&& (n^2次 )
解:T(n)=2n^2+n+1 =O(n^2)
&&& for (i=1;i&n;i++)
&&&&&&& y=y+1;&&&&&&&& ①&&&
&&&&&&& for (j=0;j&=(2*n);j++)&&&&
&&&&&&&&&& x++;&&&&&&& ②&&&&&&
&&& }&&&&&&&&&
解: 语句1的频度是n-1
&&&&&&&&& 语句2的频度是(n-1)*(2n+1)=2n^2-n-1
&&&&&&&&& f(n)=2n^2-n-1+(n-1)=2n^2-2
&&&&&&&&& 该程序的时间复杂度T(n)=O(n^2).&&&&&&&&&
O(n)&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&& b=1;&&&&&&&&&&&&&&&&&&&&& ①
&&& for (i=1;i&=n;i++) ②
&&&&&& s=a+b;    ③
&&&&&& b=a;     ④&&
&&&&&& a=s;     ⑤
解: 语句1的频度:2,&&&&&&&&
&&&&&&&&&& 语句2的频度: n,&&&&&&&&
&&&&&&&&& 语句3的频度: n-1,&&&&&&&&
&&&&&&&&& 语句4的频度:n-1,&&&&
&&&&&&&&& 语句5的频度:n-1,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&& T(n)=2+n+3(n-1)=4n-1=O(n).
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&& i=1;&&&&&& ①
&&& while (i&=n)
&&&&&& i=i*2; ②
解: 语句1的频度是1,&&
&&&&&&&&& 设语句2的频度是f(n),&& 则:2^f(n)&=n;f(n)&=log2n&&&&
&&&&&&&&& 取最大值f(n)= log2n,
&&&&&&&&& T(n)=O(log2n )
&&& for(i=0;i&n;i++)
&&&&&& for(j=0;j&i;j++)&&
&&&&&&&&& for(k=0;k&j;k++)
&&&&&&&&&&&& x=x+2;&&
解:当i=m, j=k的时候,内层循环的次数为k当i=m时, j 可以取 0,1,...,m-1 , 所以这里最内循环共进行了0+1+...+m-1=(m-1)m/2次所以,i从0取到n, 则循环共进行了: 0+(1-1)*1/2+...+(n-1)n/2=n(n+1)(n-1)/6所以时间复杂度为O(n^3).
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
我们还应该区分算法的最坏情况的行为和期望行为。如快速排序的最 坏情况运行时间是 O(n^2),但期望时间是 O(nlogn)。通过每次都仔细 地选择基准值,我们有可能把平方情况 (即O(n^2)情况)的概率减小到几乎等于 0。在实际中,精心实现的快速排序一般都能以 (O(nlogn)时间运行。
下面是一些常用的记法:
访问数组中的元素是常数时间操作,或说O(1)操作。一个算法如 果能在每个步骤去掉一半数据元素,如二分检索,通常它就取 O(logn)时间。用strcmp比较两个具有n个字符的串需要O(n)时间 。常规的矩阵乘算法是O(n^3),因为算出每个元素都需要将n对 元素相乘并加到一起,所有元素的个数是n^2。
指数时间算法通常来源于需要求出所有可能结果。例如,n个元 素的集合共有2n个子集,所以要求出所有子集的算法将是O(2n)的 。指数算法一般说来是太复杂了,除非n的值非常小,因为,在 这个问题中增加一个元素就导致运行时间加倍。不幸的是,确实有许多问题 (如著名 的&巡回售货员问题& ),到目前为止找到的算法都是指数的。如果我们真的遇到这种情况, 通常应该用寻找近似最佳结果的算法替代之。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:183415次
积分:1693
积分:1693
排名:千里之外
原创:35篇
转载:29篇
(1)(1)(2)(1)(1)(1)(2)(3)(1)(2)(3)(2)(1)(4)(1)(2)(13)(7)(1)(5)(6)(2)(1)(1)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'君,已阅读到文档的结尾了呢~~
数据结构第一章第二章第二,帮助,数据结构第,第1章,数据结构,第2章,第二章,第一章,反馈意见
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
数据结构第一章第二章
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口设求解同一问题有四种算法,这四种算法各自的时间复杂度分别为O(n^2),O(nlogn),O(2^n),O(n),
设求解同一问题有四种算法,这四种算法各自的时间复杂度分别为O(n^2),O(nlogn),O(2^n),O(n),则这四种算法按时间效率由高到低的排列次序为
O n > o nlogn > o n^2 > o 2^n
与《设求解同一问题有四种算法,这四种算法各自的时间复杂度分别为O(n^2),O(nlogn),O(2^n),O(n),》相关的作业问题
主索引、候选索引、唯一索引和普通索引第一号记录答案正确的啊 郁闷.
设第一个星期日日期数为xx+x+7+x+14+x+21=58即:4x+42=584x=16x=4即:第一个星期日的日期数是这个月的4号
2*2*2*1=8种
往往用递推算法,因为递推的效率比递归高.
两道题目的思路是一样的,先分析一个球的放法,如果有四个箱子那就是四种放法,由于题目没有要求一个箱子至少或至多放一个球,因此第二个球的放法同样是四个,以此类推,得到答案1、4*4*4=642、=101^100 ^表示乘方
设这两种皮鞋原来的价格是x元,由题意得:40%x+50%x=216&&&& 90%x=216&&&&&&& x=240;答:这两种皮鞋原价每双240元.
算法的三种基本结构是顺序结构、选择结构、循环结构,考查四个选项,应该选C故选C
设这两种靴子原来的价格是x元,由题意得:40%x+50%x=1080,&&&& 90%x=1080,&&&&&&& x=1200;答:这两种靴子原价每双1200元.
设又X个男生,那男生一共种了X*5盆花,女生有10-X个人,一共种了(10-X)*3盆花,所以一共种了X*5+(10-X)*3=42,然后求解,X=6,所以男生有6人.
第一船,一人两老虎过河,第二船,一人一牛过河,回来时,带两老虎回来第三船,一人两牛两老虎过河第四船,一人一老虎过河,结束
According to the double integral definition, linear AB formed around the Y axis space volume formula should be:Make A = B,Set A = B,Similarly for B, just A algo
当代西方电视纪录片的四种类型  电视纪录片是以影视纪实等多种艺术手段,对真人真事的详细报道和表现.其结构就是编导者对题材的组合、安排.它是客观社会生活和电视编导主观逻辑的统一,既是展示人物命运和事件发展的"轨迹",又是承载人物行动和事件发展的"框架".结构就是电视纪录片的生命.   电视纪录片的结构从形式上可以分为内部
设两种靴子原价每双 x 元有 0.4x + 0.5x = 720 x= 800 元每双800元
#include&&stdio.h&#define&P&1000003#define&LL&long&longLL&FACT[P+1];//&初始化FACT数组,FACT[i]=i!%pvoid&InitFact(LL
设这两种衬衣的原价是x元,x×40%+x×50%=108,&&&&&&&& 0.9x=108,&&&&&&&&&&& x=120;
设公约数为A,则A也为4数之和1111的约数. 所以1111只有4个约数:1,11,101,1111 最大公约数自然不可能为1111 所以这4个数为101倍数时,公约数最大为101.只要取4个和为11的数,分别乘以101即可 如:202,101,303,505 又如:202,707,101,101
气候类型的分布及其特点 (一)、热带地区的主要气候类型分布及特点: ? (1)热带雨林气候(也称赤道雨林气候).位于各洲的赤道两侧,向南、北延伸5°~10°左右,如南美洲的亚马孙平原,非洲的刚果盆地和几内亚湾沿岸,亚洲东南部的一些群岛等.这些地区位于赤道低压带,气流以上升运动为主,水汽凝结致雨的机会多,全年多雨,无干季
设原价为x元0.4x+0.5x=6x=240即:原价为240元
解:设甲乙丙丁四种草药分别为0.7X ; X; 2X ;4.7X克0.7X +X+2X +4.7X=1680解方程得X=200所以甲0.7X=0.7x200=140克 乙x=200 丙2X=200x2=400克 丁4.7X=4.7x200=4.7x200=940克答:甲乙丙丁四种草药分别为140克,200克,400克,概述:在设计算法的时候,要考虑两个方面,一个是算法的正确性,另外一个就是算法的效率,也就是复杂度,通常情况下,我们优先考虑的是时间复杂度,这也是本文要讨论的内容。算法学习的时候,经常碰到这样的问题,为什么快速排序的时间复杂度是O(nlog(n))?为何插入排序的时间复杂度是O(n^2)?这些是我们熟悉的算法时间复杂度,可能病没有太大的问题,那我们不熟悉的呢?如果我们采用三路归并排序而不是二路归并排序,时间复杂度是多少呢?一个排序算法经过某种变形以后时间复杂度又是多少呢?本文,主要从数学底层,讲述一个算法时间复杂度是如何推导的。让你真正知其所以然,而不仅仅是总是心中存有疑惑:为何快排的时间复杂度会是这么奇怪的O(nlog(n))
1.数学基础知识
首先,介绍以下数学基础知识,这些基本都分布在高等数学和离散数学之中,不进行数学推导。
一些不等式:
无论是归并还是快速排序,我们都可以把它们归结到递归/分治这一类问题的求解,他们具有一个一般性的时间复杂度表述:
这个等式的意义是:规模是n的问题可以拆分成a个规模是n/b的问题,那么它的时间复杂度就等于a个规模是n/b的问题,加上一次分解耗费的时间D(n)和一次合并耗费的时间C(n)。第二部分到第四部分将介绍三种求解这个方程式的方法。
2.递归树方法
这是一种最直观的方法,它把上述等式形象化,然后进行求解,我们通过一个例子来说明这个情况。
例子:利用递归树求解T(n)=T(n/10)+T(9n/10)+cn
划出递归树如下:
关键点:求出树的深度和每层的代价(注意,此例中因为每层的代价都相同,所以比较好求解;但在其他情况下,可能是每层代价不同,而是一个等比数列或者其他形式的数列)
1)其中,树的深度容易求解:n--&9/10n--&81/100(n)......n/n=1
也就是说,这个递归下降满足这个趋势(其中b=10/9):
2)第i层的代价:
每层的规模分别是1/10n和9/10n,而每个节点的代价是cn/10和9cn/10,所以加在一块是cn。
3)总代价:
T(n)=O(nlgn)
形如下列表达式的算法复杂度表述
T(n)=aT(n/b)+f(n)(a&=1,b&1)
主方法的证明:参考算法导论第四章
最终利用等比数列的求和公式即可求解。
4.替换代换法
说明:此种方法需要凭借一定的经验,有点类似于数学归纳法,先猜测后证明。
1)步骤:猜测时间复杂度的表述形似
2)要点:猜测要准确,归纳假设要足够强,避免弱化证明。替换非多项式变量
对于边界问题:可采用移动边界和强化归纳假设的方式加以解决。
1)证明T(n)=T(n/2)+n的时间复杂度位O(nlogn)
令T(n)&cnlgn
说明:此种算法复杂度的计算对以分支法为基础的算法比较有效。
Views(...) Comments()}

我要回帖

更多关于 递归算法的时间复杂度 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信