一个演算法的时间复杂度是什么函式?
一个演算法的时间复杂度是什么函式?
时间复杂度是度量演算法执行的时间长短,演算法的时间复杂度记做:T(n)=O(f(n))
分析:随着模组n的增大,演算法执行的时间的增长率和f(n)的增长率成正比,所以f(n)越小,演算法的时间复杂度越低,演算法的效率越高。
在计算时间复杂度的时候,先找出演算法的基本操作,然后根据相应的各语句确定它的执行次数,再找出T(n)的同数量级(它的同数量级有以下:1,Log2n ,n ,nLog2n ,n的平方,n的三次方,2的n次方,n!),找出后,f(n)=该数量级,若T(n)/f(n)求极限可得到一常数c,则时间复杂度T(n)=O(f(n))
演算法的复杂度主要包括演算法的时间复杂度和空间复杂度,演算法的时间复杂度是指
时间复杂度考虑的是演算法的执行时间,因此是D
演算法的时间复杂度
当然应该是O(n^2)
----------------------------------------------------------
演算法分析,就是复杂度的问题。
复杂度只算“最要命的”,比如,执行n^2的演算法前来个快排根本不拖速度,n^2多的都豁出去了不在乎区区一个nlogn。
书里对复杂度进行了严格的定义,包括O()、o()、Θ()、Ω()四种符号。
简单地说,
O(n^2)就是顶破天了搞个n^2次;
o(n^2)就是天花板不到n^2,比n^2矮一点(比如希尔排序就是o(n^2),因为它再倒霉也达不到n^2);
Ω(n^2)就是说某个演算法随便怎么至少都要耗费n^2,比如所有基于比较的排序都是Ω(nlogn);
Θ(n^2)就是说它即是O(n^2)又是Ω(n^2),被天花板和水泥地夹在中间了,动不了了,就是它了。
1、时间复杂度
(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)=n^2+3n+4与T(n)=4n^2+2n+1它们的频度不同,但时间复杂度相同,都为O(n^2)。
按数量级递增排列,常见的时间复杂度有:
常数阶O(1),对数阶O(log2n),线性阶O(n),
线性对数阶O(nlog2n),平方阶O(n^2),立方阶O(n^3),...,
k次方阶O(nk),指数阶O(2n)。随着问题规模n的不断增大,上述时间复杂度不断增大,演算法的执行效率越低。
2、空间复杂度
与时间复杂度类似,空间复杂度是指演算法在计算机内执行时所需储存空间的度量。记作:
S(n)=O(f(n))
我们一般所讨论的是除正常占用记忆体开销外的辅助储存单元规模。讨论方法与时间复杂度类似,不再赘述。
在一般情况下,一个演算法的时间复杂度是(关于问题规模n)的函式。 设待处理问题的规模为n,若一个演算法的时间复杂度为一个常数,则表示成数量级的形式为(O(1)),若为n*log25n,则表示成数量级的形式为(O(nlogn) )。
演算法的时间复杂度是指?空间复杂度是指?
时间复杂度指的是随着资料规模的增大时间的增率,比如资料量为n,花的时间为n^2,复杂度就是n^2,同理空间复杂度指的是记忆体的开销。最次的情况就是阶乘级别的复杂度,这种演算法是不能用的。
求一个演算法的时间复杂度
for(i=2;i<=n;++i) 即 复杂度为(n-1),第二重回圈for(j=2;j<=i-1;++j)即(1+2+...+n-2)即(1+n-2)*(n-2)/2 ,两重回圈相乘,即(n-1)*(n-1)*(n-2)/2
演算法的时间复杂度指?
指演算法执行过程中所需要的基本运算次数。
什么是演算法的时间复杂度
由于计算机执行计算是需要时间的,因此对于一个演算法的好坏,我们需要估计它需要多久才能完成计算。不过计算机耗费的时间是在执行指令上的,因此我们所估计的时间复杂度实际上是估计一个程式,相对于它的输入,它执行多少条指令才能给出答案。如果我们有n个输入,那么T(n)表示的是它所执行的指令数,再将T(n)乘上每条指令执行的时间,就是实际耗费的时间。但是每条指令执行的时间是由计算机配置好坏决定的,因此无法用来评价演算法的好坏,所以我们用T(n),即演算法相对于输入所执行的指令数,来表示演算法的时间复杂度。
是说明一个程式根据其资料n的规模大小 所使用的大致时间和空间
说白了 就是表示 如果随着n的增长 时间或空间会以什么样的方式进行增长
例
for(int i = 0; i < n;++i)
;
这个回圈执行n次 所以时间复杂度是O(n)
for(int i = 0; i< n;++i)
{
for(int j = 0; j< n;++j)
;
}
这巢状的两个回圈 而且都执行n次
那么它的时间复杂度就是 O(n^2)
时间复杂度只能大概的表示所用的时间
而一些基本步骤 所执行的时间不同 我们无法计算 所以省略
如
for(int i = 0;i < n;++i)
a = b;
和
for(int i = 0;i < n;++i)
;
这个执行的时间当然是第二个快 但是他们的时间复杂度都是 O(n)
判断时间复杂度看回圈