最新算法分析与设计作业(一)及参考答案讲课讲稿

合集下载
  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;

int n;

int *bestx;

cout<<"请输入作业数:";

cin>>n;

M=new int *[n+1];

cout<<"请输入各作业处理时间:"<

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

M[i]=new int[2];

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

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

cin>>M[k][j];

bestx=new int[n+1];

相关文档
最新文档