算法分析与设计作业及参考答案样本

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《算法分析与设计》作业( 一)

本课程作业由两部分组成。第一部分为”客观题部分”, 由

15个选择题组成, 每题1分, 共15分。第二部分为”主观题部分”,

由简答题和论述题组成, 共15分。作业总分30分, 将作为平时成

绩记入课程总成绩。

客观题部分:

一、选择题( 每题1分, 共15题)

1、递归算法: ( C )

A、直接调用自身

B、间接调用自身

C、直接或间接

调用自身 D、不调用自身

2、分治法的基本思想是将一个规模为n的问题分解为k个规模

较小的字问题, 这些子问题: ( D )

A、相互独立

B、与原问题相同

C、相互依赖

D、相互独立且与原问题相同

3、备忘录方法的递归方式是:

( C )

A、自顶向下

B、自底向上

C、和动态规划算法相同

D、非递归的

4、回溯法的求解目标是找出解空间中满足约束条件的:

( A )

A、所有解

B、一些解

C、极大解

D、极小解

5、贪心算法和动态规划算法共有特点是: ( A )

A、最优子结构

B、重叠子问题

C、贪心选择

D、

形函数

6、哈夫曼编码是: ( B)

A、定长编码

B、变长编码

C、随机编码

D、定

长或变长编码

7、多机调度的贪心策略是: ( A)

A、最长处理时间作业优先

B、最短处理时间作业优

C、随机调度

D、最优调度

8、程序能够不满足如下性质: ( D )

A、零个或多个外部输入

B、至少一个输出

C、指令的确定性

D、指令的有限性

9、用分治法设计出的程序一般是: ( A )

A、递归算法

B、动态规划算法

C、贪心算法

D、回溯法

10、采用动态规划算法分解得到的子问题:

( C )

A、相互独立

B、与原问题相同

C、相互依赖

D、相互独立且与原问题相同

11、回溯法搜索解空间的方法是: ( A )

A、深度优先

B、广度优先

C、最小耗费优先

D、随机搜索

12、拉斯维加斯算法的一个显著特征是它所做的随机选性决策

有可能导致算法: ( C )

A、所需时间变化

B、一定找到解

C、找不到所需的解

D、性能变差

13、贪心算法能得到: ( C )

A、全局最优解

B、 0-1背包问题的解

C、背包问题的

解 D、无解

14、能求解单源最短路径问题的算法是: ( A )

A、分支限界法

B、动态规划

C、线形规划

D、蒙特卡罗算法

15、快速排序算法和线性时间选择算法的随机化版本是:

( A )

A、舍伍德算法

B、蒙特卡罗算法

C、拉斯维加斯算法

D、数值随机化算法

主观题部分:

二、写出下列程序的答案( 每题2.5分, 共2题)

1、请写出批处理作业调度的回溯算法。

#include

#include

using namespace std;

class Flowing

{

friend int Flow(int ** ,int ,int []);

private:

//int Bound(int i);

void Backtrack(int t);

int **M;//

int *x;//当前解

int *bestx;//

int *f2;//

int f1;//

int f;//

int bestf;//

int n;//

};

void Flowing::Backtrack(int i)

{

if(i>n){

for(int j=1;j<=n;j++)

bestx[j]=x[j];

bestf=f;

}

else

for(int j=i;j<=n;j++){

f1+=M[x[j]][1];

f2[i]=((f2[i-1]>f1)?f2[i-1]:f1)+M[x[j]][2];

f+=f2[i];

if(f

swap(x[i],x[j]);

Backtrack(i+1);

swap(x[i],x[j]);

}

f1-=M[x[j]][1];

f-=f2[i];

}

}

int Flow(int ** M,int n,int bestx[]){ int ub=INT_MAX;

Flowing X;

X.x=new int[n+1];

X.f2=new int[n+1];

X.M=M;

X.n=n;

X.bestx=bestx;

X.bestf=ub;

X.f1=0;

X.f=0;

for(int i=0;i<=n;i++)

X.f2[i]=0,X.x[i]=i;

X.Backtrack(1);

delete[] X.x;

delete[] X.f2;

return X.bestf;

}

void main(){

int **M;

相关文档
最新文档