概念 | 对特定问题求解步骤的一种描述 |
特性 | 有穷性:一个算法必须总在执行有穷步之后结束,且每一 步 都可在有穷时间内完成 |
确定性:算法中每条指令必须有确切的含义,对于相同的输入只能得出相同的输出。 | |
可行性:算法中描述的操作都可以通过已经实现的基本运算执行有限次来实现。 | |
输入:一个算法有零个或多个输入,这些输入取自于某个特定的对象的集合。 | |
输出:一个算法有一个或多个输出,这些输出是与输入有着某种特定关系的量。 | |
评价标准 | 正确性。算法应能够正确地解决求解问题。 |
可读性。算法应具有良好的可读性,以帮助人们理解。 | |
健壮性。输入非法数据时,算法能适当地做出反应或进行处理,而不会产生莫名其妙的输出结果。 | |
效率与低存储量需求。效率是指算法执行的时间,存储量需求是指算法执行过程中所需要的最大存储空间,这两者都与问题的规模有关。 |
时间复杂度 | 一个语句的频度是指该语句在算法中被重复执行的次数 所有语句的频度只和记为T(n)
算法中基本运算【最深层循坏内的语句】的频度与T(n)同数量级
算法中基本运算的频度f(n)来分析算法的时间复杂度
算法的时间复杂度不仅依赖于问题的规模,也取决于待输入数据的性质
最坏时间复杂度是指在最坏情况下,算法的时间复杂度。 平均时间复杂度是指所有可能输入实例在等概率出现的情况下,算法的期望运行时间。 最好时间复杂度是指在最好情况下,算法的时间复杂度。 一般总是考虑在最坏情况下的时间复杂度,以保证算法的运行时间不会比它更长。
|
空间复杂度 | S(n)算法所耗费的存储空间 一个程序在执行时除需要存储空间来存放本身所用的指令、常数、变量和输入数据外 还需要一些对数据进行操作的工作单元和数据一些为实现计算所需信息的辅助空间 |
1.一个算法应该是( ).
A.程序
B.问题求解步骤的描述
C.要满足五个基本特性
D.A和C
2.某算法的时间复杂度为0(n),表明该算法的( ).
A.问题规模是n2
B.执行时间等于n2
C.执行时间与n2成正比
D.问题规模与n2成正比
3.以下算法的时间复杂度为( )。
void fun(int n){int i=1;while(i<=n)i=i*2;}
A.O(n)
B.O(n2)
C.O(nlog2n)
D.O(log2n)
4.【2011统考真题】设n 贵州干部培训 www.gdganxun.cn 是描述问题规模的非负整数,下面的程序片段的时间复杂度是( )。
x=2;while(x<n/2);x=2*x;
A.O(log2n)
B.O(n)
C.O(nlog2n)
D.O(n2)
5.【2012统考真题】求整数n (n≥0)的阶乘的算法如下,其时间复杂度是( )。
int fact(int n){ if(n<=1) return 1; return n*fact(n-1);}
A.O(log2n)
B.O(n)
C.O(nlog2n)
D.O(n2)
6.【2013统考真题】已知两个长度分别为m和n的升序链表,若将它们合并为长度为m+n的一个降序链表,则最坏情况下的时间复杂度是( )。
A.O(n)
B.O(mn)
C.O(min(m,n))
D.O(max(m,n))
7.【2014 统考真题】下列程序段的时间复杂度是( ).
count=0;for(k=1;k<=n;k*=2) for(j=1;j<=n;j++) count++;
A.O(log2n)
B.O(n)
C.O(nlog2n)
D.O(n2)
8.【2017统考真题】下列函数的时间复杂度是()
int func(int n){ int i=0,sum=0; while(sum<n) sum += ++i; return i;}
A.O(log2n)
B.O(n)
C.O(nlog2n)
D.O(n2)
9.有以下算法,其时间复杂度为()
void fun(int n){ int i=0; while(i*i*i<=n) i++;}
A.O(n)
B.O(nlogn)
C.O(3√n)
D.O(√n)
10.程序段如下:
for(i=n-1;i>1;i--) for(j=1;j<i;j++) if(A[j]>A[j+1]) swap(A[j],A[j+1]);
其中n为正整数,则最后一行语句的频度在最坏情况下是()
A.O(n)
B.O(nlogn)
C.O(n3)
D.O(n2)
11.以下算法中加下画线的语句的执行次数为()
int m=0;i,j;for(i=1;i<=n;i++) for(j=1;j<=2*i,j++) m++;
A.n(n+1)
B.n
C.n+1
D.n2
12. 下面说法中,错误的是( )。
I.算法原地工作的含义是指不需要任何额外的辅助空间
II.在相同规模n下,复杂度为O(n)的算法在时间上总是优于复杂度为0(2n)的算法
II.所谓时间复杂度,是指最坏情况下估算算法执行时间的一个上界
IV.同一个算法,实现语言的级别越高,执行效率越低
A. I
B. I,II
C. I,IV
D. III
13. 【2019 统考真题】设n是描述问题规模的非负整数,下列程序段的时间复杂度是( ).
x=0;while(n>=(x+1)*(x+1))x=x+1;
A. O(logn)
B. O(n1/2) ,
C. O(n)
D. O(n2)
综合应用题【1】
【2】分析以下各程序段,求出算法的时间复杂度。
①
i=1;k=0;while(i<n-1){ k=k+10*i; i++;}
②
y=0;while((y+1)*(y+1)<=n) y=y+1;
③
for(i=1;i<=n;i++) for(j=1;j<=i;j++) for(k=1;k<=j;k++) x++;
④
for(i=0;i<n;i++) for(j=0;j<m;j++) a[i][j]=0;