计算机算法试题有答案.docx
- 文档编号:28593504
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:9
- 大小:19.29KB
计算机算法试题有答案.docx
《计算机算法试题有答案.docx》由会员分享,可在线阅读,更多相关《计算机算法试题有答案.docx(9页珍藏版)》请在冰豆网上搜索。
计算机算法试题有答案
算法设计与分析试卷
一、填空题(20分,每空2分)
1、算法的性质包括输入、输出、___、有限性。
2、动态规划算法的基本思想就将待求问题_____、先求解子问题,然后从这些子问题的解得到原问题的解。
3、设计动态规划算法的4个步骤:
(1)找出____,并刻画其结构特征。
(2)_______。
(3)_______。
(4)根据计算最优值得到的信息,_______。
4、流水作业调度问题的johnson算法:
(1)令N1=___,N2={i|ai>=bj};
(2)将N1中作业依ai的___。
5、对于流水作业高度问题,必存在一个最优调度π,使得作业π(i)和π(i+1)满足Johnson不等式_____。
6、最优二叉搜索树即是___的二叉搜索树。
二、综合题(50分)
1、当(a1,a2,a3,a4,a5,a6)=(-2,11,-4,13,-5,-2)时,最大子段和为∑ak(2<=k<=4)____(5分)
2、由流水作业调度问题的最优子结构性质可知,T(N,0)=______(5分)
3、最大子段和问题的简单算法(10分)
intmaxsum(intn,int*a,int&bestj)
{
intsum=0;
for(inti=1;i<=n;i++)
for(intj=i;j<=n;j++)
intthissum=0;
for(intk=i;k<=j;k++)_____;
if(thissum>sum){
sum=thissum;
______;
bestj=j;}
}
returnsum;
}
4、设计最优二叉搜索树问题的动态规划算法OptimalBinarysearchTree?
(15分)
VoidOptimalBinarysearchTree(inta,intn,int**m,int**w)
{
for(inti=0;i<=n;i++){w[i+1][i]=a[i];m[i+1][i]=____;}
for(intr=0;r for(inti=1;i<=n-r;i++){ intj=i+r; w[i][j]=w[i][j-1]+a[j]+b[j]; m[i][j]=______; s[i][j]=i; for(intk=i+1;k<=j;k++){ intt=m[i][k-1]+m[k+1][j]; if(_____){m[i][j]=t;s[i][j]=k;} } m[i][j]=t;s[i][j]=k;} } 5、设n=4,(a1,a2,a3,a4)=(3,4,8,10),(b1,b2,b3,b4)=(6,2,9,15)用两种方法求4个作业的最优调度方案并计算其最优值? (15分) 三、简答题(30分) 1、将所给定序列a[1: n]分为长度相等的两段a[1: n/2]和a[n/2+1: n],分别求出这两段的最大子段和,则a[1: n]的最大子段和有哪三种情形? (10分) 答: 2、由0——1背包问题的最优子结构性质,可以对m(i,j)建立怎样的递归式? (10分) 3、0——1背包求最优值的步骤分为哪几步? (10分) 参考答案: 填空题: 确定性分解成若干个子问题最优解的性质 递归地定义最优值以自底向上的方式计算出最优值 构造最优解{i|ai 最小平均查找长度 综合题: 20min{ai+T(N-{i},bi)}(1= 法一: min(ai,bj)<=min(aj,bi) 因为min(a1,b2)<=min(a2,b1) 所以1→2(先1后2) 由min(a1,b3)<=min(a3,b1) 得1→3(先1后3) 同理可得: 最后为1→3→4→2 法二: johnson算法思想 N1={1,3,4}N2={2} N11={1,3,4}N12={2} 所以N11→N12 得: 1→3→4→2 简答题: 1、 (1)a[1: n]的最大子段和与a[1: n/2]的最大子段和相同。 (2)a[1: n]的最大子段和与的最大子段a[n/2+1: n]和相同。 (3)a[1: n]的最大子段和为∑ak(i= 2、 (1)m(i,j)=max{m(i+1,j),m(i+1,j-wi)+ui}(j>=wi) 或则m(i,j)=m(i+1,j)(0<=j (2)m(n,j)=unj>=wn或则 m(n,j)=00<=j 3、 (1)、p[n+1]={(0,0)} (2)、由p[i+1]→q[i+1],q[i+1]=p[i+1]⊕(wi,vi) (3)、Mij=p[i+1]∪q[i+1] Pi=Mij——其中的受控点=p[i+1]∪q[i+1]——其中的受控 (4)、重复 (2)-(3)直到求出P[1] 1.在一个算法中调用另一个算法时,系统需在运行被调用算法之前完成哪些工作? 同时从被调用算法返回调用算法需完成哪些工作? 答: 在一个算法中调用另一算法时,系统需在运行被调用算法之前先完成三件事: (1)将所有实参指针、返回地址等信息传递给被调用算法; (2)为被调用算法的局部变量分配存储区; (3)将控制转移到被调用算法的入口。 在从被调用算法返回调用算法时需完成三件事: (1)保存被调用算法的计算结果; (2)释放分配给被调用算法的数据区; (3)依照被调用算法保存的返回地址将控制转移到调用算法。 2.动态规划算法求解问题的步骤? 答: 动态规划法适用于解最优化问题。 通常可以按以下4个步骤设计: (1)找出最优解的性质,并刻画其结构特征; (2)递归地定义最优值; (3)以自底向上的方式计算最优值; (4)根据计算最优值时得到的信息构造最优解。 3.线性规划法中单纯形算法的基本步骤? 答: 步骤一选入基变量。 步骤二选离基变量。 步骤三做转轴变换。 步骤四转步骤一。 4.分治法的基本思想和原理是什么? 答: 分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同。 递归地解这些子问题,然后将各子问题的解合并得到原问题的解。 5.利用回溯法解决问题包含哪些步骤? 答: 利用回溯法解题常包含以下3步骤: (1)针对所给问题,定义问题的解空间; (2)确定易于搜索的解空间结构; (3)以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。 五分析题(36分) 1.求下列函数的渐进表达式: 3n2+10n;n2/10+2n;21+1/n;logn3;10log3n 分析与解答: 3n2+10n=O(n2); n2/10+2n=O(2n); 21+1/n=O (1); logn3=O(logn); 10log3n=O(n) 2.讨论O (1)和O (2)的区别。 分析与解答: 根据符号O的定义易知O (1)=O (2)。 用O (1)或O (2)表示同一个函数时,差别仅在于其中的常数因子。 3.按渐近阶排列表达式 按照渐近阶从低到高的顺序排列以下表达式: 4n2,logn,3n,20n,2,n2/3。 又n! 应该排在哪一位? 分析与解答: 按渐近阶从低到高,函数排列顺序如下: 2,logn,n2/3,20n,4n2,3n,n! 。 4.算法效率 (1)假设某算法在输入规模为n时计算时间为T(n)=3*2n。 在某台计算机上实现并完成该算法的时间为t秒。 现有另一台计算机,其运行速度为第一台的64倍,那么在这台新机器上用同一算法在t秒内能解输入规模为多大的问题? (2)若上述算法的计算时间改进为T(n)=n2,其余条件不变,则在新机器上用t秒时间能解输入规模为多大的问题? (3)若上述算法的计算时间进一步改进为T(n)=8,其余条件不变,那么在新机器上用t秒时间能解输入规模为多大的问题? 分析解答: (1)设新机器用同一算法在t秒内能解输入规模为n1的问题。 因此有: t=3*22=3*2n1/64,解得你n1=n+6。 (2)n12=64n2 n1=8n。 (3)由于T(n)=常数,因此算法可解任意规模的问题。 5.阶乘函数 阶乘函数可递归地定义为: intfactorial(intn) { if(n==0)return1; returnn*factorial(n-1); } 6.Fibonacci数列 无穷数列1,1,2,3,5,8,13,21,34,55,……,称为Fibonacci数列。 它可以递归地定义为: 请对这个无穷数列设计一个算法,并进行描述(自然语言描述和VC++描述). 第n个Fibonacci数可递归地计算如下: intfibonacci(intn) { if(n<=1)return1; returnfibonacci(n-1)+fibonacci(n-2); } 7.循环赛日程表 设有n=2k个运动员要进行兵乓球循环赛。 现在要设计一个满足以下要求的比赛日程表: (1)每个选手必须与其他n-1个选手各赛一次; (2)每个选手一天只能赛一次; (3)循环赛一共进行n-1天。 请设计一个算法解决以上问题,并进行描述(自然语言和C++语言) 按分治策略,将所有的选手分为两半,n个选手的比赛日程表就可以通过为n/2个选手设计的比赛日程表来决定。 递归地用对选手进行分割,直到只剩下2个选手时,比赛日程表的制定就变得很简单。 这时只要让这2个选手进行比赛就可以了。 8.有一批集装箱要装上一艘载重量为c的轮船。 其中集装箱i的重量为Wi。 最优装载问题要求确定在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船。 分析回答以下两个问题: (1)分析以上最优装载问题具有贪心选择性质 (2)用C++程序进行正确的算法描述 分析与解答: (1)设集装箱已依其重量从小到大排序,(x1,x2,…,xn)是最有装载问题的一个最优解。 又设k=min{i|xi=1}。 易知,如果给定的最有装载问题有解,则1≤k≤n。 2当k=1时,(x1,x2,…,xn)是满足贪心选择性质的最优解。 ②当k>1时,取y1=1;yk=0;yi=xi,1 因此,()是所给最有装载问题的可行解。 另一方面,由知,()是满足贪心选择性质的最优解。 所以,最优装载问题具有贪心选择性质。 (2)最优装载问题可用贪心算法求解。 采用重量最轻者先装的贪心选择策略,可产生最优装载问题的最优解。 具体算法描述如下。 template voidLoading(intx[],Typew[],Typec,intn) { int*t=newint[n+1]; Sort(w,t,n); for(inti=1;i<=n;i++)x[i]=0; for(inti=1;i<=n&&w[t[i]]<=c;i++){x[t[i]]=1;c-=w[t[i]];} }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 算法 试题 答案