算法分析与设计试题完整版
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
算法分析与设计试题 HEN system office room 【HEN16H-HENS2AHENS8Q8-HENH1688】
一、选择题(20分)
1.最长公共子序列算法利用的算法是(
B )。
A、分支界限法
B、动态规划法
C、贪心法
D、回溯法
2.实现棋盘覆盖算法利用的算法是(
A )。
A、分治法
B、动态规划法
C、贪心法
D、回溯法
3.下面是贪心算法的基本要素的是(
C )。
A、重叠子问题
B、构造最优解
C、贪心选择性质
D、定义最优解
4.回溯法的效率不依赖于下列哪些因素( D )
A.满足显约束的值的个数
B. 计算约束函数的时间
C. 计算限界函数的时间
D. 确定解空间的时间
5.下面哪种函数是回溯法中为避免无效搜索采取的策略(
B )
A.递归函数 B.剪枝函数C。随机数函数 D.搜索函数
6.采用最大效益优先搜索方式的算法是(
A )。
A、分支界限法
B、动态规划法
C、贪心法
D、回溯法
7.贪心算法与动态规划算法的主要区别是(
B )。
A、最优子结构
B、贪心选择性质
C、构造最优解
D、定义最优解
8. 实现最大子段和利用的算法是(
B )。
A、分治策略
B、动态规划法
C、贪心法
D、回溯法
9.优先队列式分支限界法选取扩展结点的原则是(
C )。
A、先进先出
B、后进先出
C、结点的优先级
D、随机
10.下列算法中通常以广度优先方式系统搜索问题解的是(
A )。
A、分支限界法
B、动态规划法
C、贪心法
D、回溯法
二、填空题(22分每空2分)
1.算法是由若干条指令组成的有穷序列,且要满足输入、输出、确定性和有限性四条性质。
2、大整数乘积算法是用分治法来设计的。
3、以广度优先或以最小耗费方式搜索问题解的算法称为分支限界法。
4、舍伍德算法总能求得问题的一个解。
5、贪心选择性质是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法的主要区别。
6.快速排序
template
void QuickSort (Type a[], int p, int r)
{
if (p int q=Partition(a,p,r); QuickSort (a,p,q-1); 哈密顿环问题的算法可由回溯法设计实 现。 8.贪心算法不一定产生最优解。 9.算法中通常以深度优先方式系统搜索问题解的是回溯法。 三、算法设计与分析(25分) 1.用欧几里德迭代算法求两个数的最小公倍数(10分) #include using namespace std; int Gcd(int m,int n) { if(m==0) return n; if(n==0) return m; int t=m>n?n:m; while(m%t||n%t) t--; return t; } int main() { int a,b; cout<<"Input a & b (0<=a cin>>a>>b; int m=a*b/Gcd(a,b); cout<<"The Least Common Multiple is:"< return 0; 2、试用动态规划算法实现最大子矩阵和问题:求n m 矩阵A的一个子矩阵,使其各元素之各为最大。(15分) 解:解答如下: int MaxSum2(int m,int n,int **a) { int sum=0; int *b=new int[n+1]; for(int i=1;i<=m;i++){ for(int k=1;k<=n;k++) b[k]=0; ……………………………..(5分) for(int j=i;j<=m;j++){ for(int k=1;k<=n;k++) b[k]+=a[j][k]; int max=MaxSum(n,b); if(max>sum) sum=max; } } return sum; ……………………………..(10分) } int MaxSum(int n,int *a) { int sum=0,b=0; for(int i=1;i<=n;i++){ if(b>0) b+=a[i]; else b=a[i]; if(b>sum) sum=b; } Return sum; ……………………………..(15分) } 四、简答题(33分) 1、假设有7个物品,它们的重量和价值如下表所示。若这些物品均可以被分割,且背包容量M =150,如果使用贪心方法求解此背包问题,使收益最大,请写出求解 E 放入%,得到价值为。 2. 写出分治算法MaxMin 算法对下列实例中找最大数和最小数的过程。(10分) 数组 A=(48,12,61,3,5,19,32,7) 解: 1、 48,12,61,3, 5,19,32,7 表中元素多于二, 对半 分割 2、48,12 61,3 5,19 32,7 表中元素多于二, 对半 分割 3、 48~61, 12~3 19~32,5~7 求前半部分的最大最小和后半部分的最大最小,两个半部分的大者为最 大,小者为最小 4、 61~32 3~5 两个半部分的大者为最大,小者为最小 5、 61 3 寻找结束 3. 写出多段图最短路经动态规划算法求解下列实例的过程,并求出最优值。(13分)C(1,2)=3, C(1,3)=5 ,C(1,4)=2 C(2,6)=8 ,C(2,7)=4 ,C(3,5)=5 ,C(3,6)=4, C(4,5)=2,C(4,6)=1 C(5,8)=4, C(6,8)=5 ,C(7,8)=6 解 :Cost(4,8)=0 Cost(3,7)= C(7,8)+0=6 , Cost(3,6)= C(6,8)+0=5, Cost(3,5)= C(5,8)+0=4 Cost(2,4)= min{C(4,6)+ Cost(3,6), C(4,5)+ Cost(3,5)} = min{1+ 5, 2+4}=6 Cost(2,3)= min{C(3,6)+ Cost(3,6) } = min{4+5}=9 Cost(2,2)= min{C(2,6)+ Cost(3,6), C(2,7)+ Cost(3,7)}