三.算法和算法评价
1.算法的基本概念
算法(Algorithm)是对特定问题求解步骤的一种描述,它是指令的有限序列,其中的每条指令 表示一个或多个操
1.1算法的特性
1.1.1有穷性
一个算法必须总在执行有穷步之后结束,且每一步都可在有穷时间内完成。
注:算法必须是有穷的,而程序可以是无穷的
1.1.2确定性
算法中每条指令必须有确切的含义,对于相同的输入只能得出相同的输出。
1.1.3可行性
可行性。算法中描述的操作都可以通过己经实现的基本运算执行有限次来实现。
1.1.4输入
一个算法有零个或多个输入,这些输入取自于某个特定的对象的集合。
1.1.5输出
一个算法有一个或多个输出,这些输出是与输入有着某种特定关系的量。
1.2.好算法的特性
1.2.1正确性
算法应能够正确地解决求解问题。
1.2.2可读性
算法应具有良好的可读性,以帮助人们理解。
1.2.3健壮性
输入非法数据时,算法能适当地做出反应或进行处理,而不会产生莫名其妙的输出结果。
1.2.4高效率与低存储量需求
高效率:花的时间少。 时间复杂度低。
低存储量:不费内存。 空间复杂度低
四.算法效率的度量
算法效率的度量是通过时间复杂度和空间复杂度来描述的
1.时间复杂度
时间复杂度T(n)——根据算法写成的程序在执行时耗费时间的长度。
这个长度往往也跟输入数据的规模有关。时间复杂度过高的低效算法可能导致我们在有生之年都等不到运行结果。
2.空间复杂度
空间复杂度S(n)——根据算法写成的程序在执行时占用存储单元的长度。
这个长度往往与输入数据的规模有关。空间复杂度过高的算法可能导致使用的内存超限,造成程序非正常中断。
算法原地工作是指算法所需的辅助空间为常量,即O(1)。
习题:
选择 PS:log_2 表示log以2为底的对数
1.一个算法应该是(B).A.程序B.问题求解步骤的描述C.要满足五个基本特性D.A和C
本题是中山大学某年的考研真题,题目本身没有问题,考查的是算法的定义。程序不一定满足有穷性,如死循环、操作系统等,而算法必须有穷。算法代表对问题求解步骤的描述,而程序则是算法在计算机上的特定实现。不少读者认为C也对,它只是算法的必要条件,不能成为算法的定义。
2.某算法的时间复杂度为O(n^2),表明该算法的(C)。A.问题规模是n^2B.执行时间等于n^2C.执行时间与n^2成正比D.问题规模与n^2成正比
网络异常,图片无法展示|3.以下算法的时间复杂度为()
voidfun(intn){
inti=1;
while(i<=n){
i=i*2;
}
}
网络异常,图片无法展示|
网络异常,图片无法展示|4.【2011统考真题】设n是描述问题规模的非负整数,下面的程序片段的时间复杂度是(A)。
x=2;
while(x<n/2)
x=2*x;
网络异常,图片无法展示|
基本运算(执行频率最高的语句)为x=2*x,每执行一次×乘2,设执行次数为t,则有2^t+1<n/2,所以t<log_2 (n/2)-1=log_2 n -2,得T(n) = O(log_2 n)
5.【2012统考真题】求整数n(n≥0)的阶乘的算法如下,其时间复杂度是(B)。
intfact(intn){
if(n<=1) return1;
returnn*fact(n-1);
}
网络异常,图片无法展示|
网络异常,图片无法展示|6.【2013统考真题】已知两个长度分别为m和n的升序链表,若将它们合并为长度为m+n的一个降序链表,则最坏情况下的时间复杂度是(D)。A.O(n)B.O(mn)C.O(min(m,n))D.O(max(m,n))
网络异常,图片无法展示|7.【2014统考真题】下列程序段的时间复杂度是(C).
count=0;
for(k=1;k<=n;k*=2)
for(j=1;j<=n;j++)
count++;
网络异常,图片无法展示|
网络异常,图片无法展示|8.下列函数的时间复杂度是(B)
intfunc(intn){
inti=0,sum=0;
while(sum<n) sum+=++i;
returni;
}
网络异常,图片无法展示|
网络异常,图片无法展示|9.有以下算法,其时间复杂度为(C)。
voidfun(intn){
inti=0;
while(i*i*i<=n)
i++;
}
网络异常,图片无法展示|
网络异常,图片无法展示|10.程序段如下:
for(i=n-1;i>1;i--)
for(j=1;j<i;j++)
if(A[j]>A[j+1])
A[j]与A[j+1]对换
其中n为正整数,则最后一行语句的频度在最坏情况下是(D)。
网络异常,图片无法展示|
网络异常,图片无法展示|11.以下算法中加下画线的语句的执行次数为(A)。
intm=0,i,j;
for(i;i<=n;i++)
for(j=1;j<=2*i;j++)
m++;
__
A.n(n+1)B.nC.n+1D.n^2
网络异常,图片无法展示|12.下面说法中,错误的是(A)。I.算法原地工作的含义是指不需要任何额外的辅助空间II.在相同规模n下,复杂度为O(n)的算法在时间上总是优于复杂度为O(2^n的算法III.所谓时间复杂度,是指最坏情况下估算算法执行时间的一个上界IV.同一个算法,实现语言的级别越高,执行效率越低A.IB.I,IIC.I,IVD.III
I.算法原地工作是指算法所需的辅助空间是常量。
Ⅱ,本项考查算法效率的理解,时间复杂度是指渐近时间复杂度,不要想当然地去给n赋予一个特殊值,时间复杂度为O()的算法必然优于时间复杂度为O(2^n)的算法。
III.时间复杂度总是考虑最坏情况下的时间复杂度,以保证算法的运行时间不会比它更长。
IV为严蔚敏教材中的原话,该问题在论坛讨论过多年,对于这种在语言层次上的效率问题,建议不要以特例程序来解释其优劣,此处认为该结论是正确的。
13.【2019统考真题】设n是描述问题规模的非负整数,下列程序段的时间复杂度是(B)。
x=0;
while(n>=(x+1)*(x+1))
x=x+1;
网络异常,图片无法展示|
假设第k次循环终止,则第k次执行时,(x+1)^2>n,x的初始值为0,第k次判断时,x=k一1,即k^2>n,k>√n,因此该程序段的时间复杂度为O(√n)。因此选B。
简答
网络异常,图片无法展示|时间复杂度为O(nlog_2 n)。
网络异常,图片无法展示|
网络异常,图片无法展示|
网络异常,图片无法展示|
DS1.疑难总结
1.循环主体中的变量参与循环条件的判断
网络异常,图片无法展示|2.循环主体中的变量与循环条件无关
网络异常,图片无法展示|