时间复杂度记为:T(n)=O(f(n));其中n是()。A、函数B、问题的规模C、渐近符号D、规模的函数

题目

时间复杂度记为:T(n)=O(f(n));其中n是()。

  • A、函数
  • B、问题的规模
  • C、渐近符号
  • D、规模的函数
参考答案和解析
正确答案:B
如果没有搜索结果或未解决您的问题,请直接 联系老师 获取答案。
相似问题和答案

第1题:

T(n)=O(f(n))中,函数O()的正确含义为

A.T(n)为f(n)的函数

B.T(n)为n的函数

C.存在足够大的正整数M,使得T(n)≤M×f(n)

D.存在足够大的正整数M,使得M×f(n)≤T(n)


正确答案:C

第2题:

请编写函数fun(),它的功能是求Fibonacci数列中小于t的最大的一个数,结果由函数返回。其中Fibonacci数列F(n)的定义为

F(0)=0,F(1)=1

F(n)=F(n-1)+F(n-2)

例如:t=1000时,函数值为987。

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

include <conio.h>

include <math.h>

include <stdio.h>

int fun(int t)

{

}

main()

{

int n;

clrscr();

n=1000;

printf("n=%d, f=%d\n",n, fun(n));

}


正确答案:int fun(int t) { int a=1b=1c=0i; /*a代表第n-2项b代表第n-1项c代表第n项*/ /*如果求得的数。比指定比较的数小则计算下一个Fibonacci数对ab得新置数*/ do { c=a+b; a=b; b=c; } while(ct); /*如果求得的数c比指定比较的数大时退出循环*/ c=a; /*此时数c的前一个Fibonacci数为小于指定比较的数的最大的数*/ return c; }
int fun(int t) { int a=1,b=1,c=0,i; /*a代表第n-2项,b代表第n-1项,c代表第n项*/ /*如果求得的数。比指定比较的数小,则计算下一个Fibonacci数,对a,b得新置数*/ do { c=a+b; a=b; b=c; } while(ct); /*如果求得的数c比指定比较的数大时,退出循环*/ c=a; /*此时数c的前一个Fibonacci数为小于指定比较的数的最大的数*/ return c; } 解析:根据所给数列定义不难发现,该数列最终的结果是由两个数列之和组成,所以可以在循环内部始终把c看成是前两项之和(即第n项),而a始终代表第n-2项,b始终代表第n-1项(通过不断地重新赋值来实现)。应注意,退出循环时得到的数c是大于指定比较的数的最小的数,而它的前一个数就是小于指定比较的数的最大的数。

第3题:

● 某算法的时间复杂度表达式为 T(n)=an2+bnlgn+cn+d,其中,n为问题的规模,a、b、c和d为常数,用O表示其渐近时间复杂度为 (63)。

(63)A. O(n2) B. O (n) C. O (n1gn) D. O (1)


正确答案:A
解析:时间复杂度是度量算法执行的时问长短。根据表达式T(n)=an2+bnlgn+cn+d可知当n无限大时,T(n)=an2,故时间复杂度为O(n2)

 

第4题:

某个算法的时间复杂度递归式T(n)=T(n-1)+n,其中n为问题的规模,则该算法的渐进时间复杂度为(62),若问题的规模增加了16倍,则运行时间增加(63)倍。

A.16
B.64
C.256
D.1024

答案:C
解析:
对于递归式,假设T(1)=1,则:
T(n)=T(n-1)+n
=T(n-2)+n-1+n
=T(n-3)+n-2+n-1+n
=1+2+…+n-1+n
=n(n+1)/2
可见,时间复杂度为O(n2)。若问题的规模增加了16倍,则运行时间增加了162=256倍。

第5题:

若n表示问题的规模、O(f(n))表示算法的时间复杂度随n变化的增长趋势,则算法时间复杂度最小的是(59)。

A.O(n2)

B.O(n)

C.O(logn)

D.O(nlogn)


正确答案:C
解析:本题考查的是算法消耗的时间度量。一般情况下,一个算法中基本操作重复执行的次数是问题规模n的某个函数f(n),算法的时间量度记作T(n)=O(f(n)),它表示随问题n的增大,算法执行时间的增长率和 f(n)的增长率相同,称做算法的渐进时间复杂度,简称时间复杂度。显然,在O(n2)、O(n)、 O(logn)和O(nlogn)中,复杂度最小的是O(logn)。

第6题:

A算法的时间复杂度为O(n^3),B算法的时间复杂度为O(2n),则说明()。

A对于任何的数据量,A算法的时间开销都比B算法小

B随着问题规模n的增大,A算法比B算法有效

C随着问题规模n的增大,B算法比A算法有效

D对于任何数据量,B算法的时间开销都比A算法小


参考答案:B

第7题:

编写函数,isValue(),它的功能是求Fibonacci数列中大于t的最小的一个数,结果由函数返回,其中 Fibonacci数列F(n)的定义为:

F(0)=0,F(1)=1

F(n)=F(n-1)+F(n-2)

最后调用函数writeDat(),把结果输出到文件OUTl0.DAT中。

例如:当t=1000时,函数值为1597。

注意:部分源程序已给出。

请勿改动主函数main()和写函数WriteDat()的内容。

include <stdio.h>

int jsValue(int t)

{

}

main ( )

{

int n;

n=1000;

printf("n=%d, f=%d\n", n, jsValue(n));

writeDat ();

}

writeDat ()

{

FILE *in, *out;

int n, s;

ut = fopen ("OUT10.DAT", "w");

s = jsValue(1O00); printf("% d",s);

fprintf(out, "%d\n", s);

fclose (out);

}


正确答案:int jsValue(int t) { int f1=0f2=1fn; fn=f1+f2; while(fn=t) {f1=f2;f2=fn;fn=f1+f2;) /*如果当前的Fibonacci数不大于t 则计算下一个Fibonacci数*/ return fn; /*返回Fibonacci数列中大于t的最小的一个数*/ }
int jsValue(int t) { int f1=0,f2=1,fn; fn=f1+f2; while(fn=t) {f1=f2;f2=fn;fn=f1+f2;) /*如果当前的Fibonacci数不大于t, 则计算下一个Fibonacci数*/ return fn; /*返回Fibonacci数列中大于t的最小的一个数*/ } 解析:解答本题的关键是要充分理解题意,只有理解了题意本身的数学过程,才能把数学过程转化为程序逻辑。根据已知数列,我们不难发现:Fibonacci数列中,从第三项开始,每一项都可以拆分为前两项之和。本题要求找到该数列中“大于t的最小的一个数”。这里可以借助一个while循环来依次取数列中的数,直到出现某一项的值大于t,那么这一项就是“大于t的最小的一个数”。注意:在循环体内部,我们用变量f1始终来表示第n项的前面第二项,用变量侵来始终表示第n项的前面第一项。这就实现了变量的活用与巧用。

第8题:

某算法的时间复杂度表达式为T(n)=an2+bnlgn+cn+d,其中,n为问题的规模,a、b、c和d为常数,用O表示其渐近时间复杂度为( )。

A.(n2)

B.O(n)

C.O(nlgn)

D.O(1)


正确答案:A
解析:时间复杂度是度量算法执行的时问长短。根据表达式T(n)=an2+bnlgn+cn+d可知当n无限大时,T(n)=an2,故时间复杂度为O(n2)

第9题:

在某个算法时间复杂度递归式T(n)=T(n-1)+n,其中n为问题的规模,则该算法的渐进时间复杂度为( ),若问题的规模增加了16倍,则运行时间增加( )倍。

A.Θ(n) B.Θ(nlgn) C.Θ(n2) D.Θ(n2lgn) A.16 B.64 C.256 D.1024


正确答案:C,C

第10题:

某个算法的时间复杂度递归式T(n)=T(n-1)+n,其中n为问题的规模,则该算法的渐进时间复杂度为( ),若问题的规模增加了16倍,则运行时间增加(请作答此空)倍。

A.16
B.64
C.256
D.1024

答案:C
解析:
对于递归式,假设T(1)=1,则:T(n)=T(n-1)+n=T(n-2)+n-1+n=T(n-3)+n-2+n-1+n=1+2+…+n-1+n=n(n+1)/2可见,时间复杂度为O(n2)。若问题的规模增加了16倍,则运行时间增加了162=256倍。

更多相关问题