算法分析与设计实验报告.doc

  1. 1、本文档共24页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
该文档的主要目的是介绍两种特定的算法——独立任务最优调度以及动态规划算法详细内容包括两个部分第一部分是实验一,介绍了如何使用计算机算法进行任务分割,第二部分是实验二,介绍了如何通过动态规划找到最优的调度方案这两个部分都是为了实现实现任务并行化处理整个文档旨在让读者了解这两种算法的原理及其应用场景

计算机算法设计与分析实验报告

目录

实验一 1

[实验题目] 1

[问题描述] 1

[算法设计] 1

[算法分析] 1

[源代码] 1

[运行结果] 2

实验二 2

[实验题目] 2

[问题描述] 2

[算法设计] 2

[算法分析] 2

[源代码] 2

[运行结果] 4

实验三 5

[实验题目] 5

[问题描述] 5

[算法设计] 5

[算法分析] 5

[源代码] 5

[运行结果] 6

1

实验一

[实验题目]

2-7集合划分问题

[问题描述]

n个元素的集合{1,2,…,n}可以划分为若干非空子集。例如,当n=4时,集合{1,2,3,4}可以划分为15个不同的非空子集。

[算法设计]

给定正整数n,计算出n个元素的集合{1,2,…,n}可以划分为多少个不同的非空子集。

[算法分析]

本算法实现采用分治法思想,F(n,m)=F(n-1,m-1)+m*F(n-1,m)。假设将m个

元素分解到n个集合中,首先考虑将(m-(n-1))个元素分到第一个集合中,

将余下的(n-1)个元素分别分配到余下的(n-1)个集合中,然后再考虑将

(m-(n-2))个元素分配到第一个集合中,将余下的(n-2)个元素分别分配

到余下的(n-1)集合中,依此类推,直到后面的有一个集合中的元素个数比第一个集合中的元素个数多为止。

[源代码]

#includeiostream

usingnamespacestd;

intcompute_bell(introw,intposition)

if(row==1)

return1;

if(row==2position==1)

return1;

else

{

if(position==1)

returncompute_bell(row-1,row-1);

else

returncompute_bell(row,position-1)+

compute_bell(row-1,position-1);

}

intmain(){

intn=0;

intm;

coutpleaseinputanumber.endl;

cinn;

m=compute_bell(n,n);

couttheresuleismendl;

2

[运行结果]

D:\ProgramFiles(x86)\DEV-CPP\work

D:\ProgramFiles(x86)\DEV-CPP\workspace\suanfe

pleaseinputanumber.

5

theresuleis,52

请按任意键继续..

实验二

[实验题目]

3-1独立任务最优调度问题

[问题描述]

用2台处理机A和B处理n个作业。设第i个作业交给机器A处理时需要时间ai,若由机器B来处理,则需要时间bi。由于各作业的特点和机器的性能关系,很可能对于某些i,有ai≥bi,而对于某些j,j≠i,有ajbj。既不能将一个作业分开由2台机器处理,也没有一台机器能同时处理2个作业。设计一个动态规划算法,使得这2台机器处理完这n个作业的时间最短(从任何一台机器开工到最后一台机器停工的总时间)。研究一个实例:(al,a2,a3,a4,a5,a6)=

(2,5,7,10,5,2);(bl,b2,b3,b4,b5,b6)=(3,8,4,11,3,4)。

[算法设计]

对于给定的2台处理机A和B处理n个作业,找出一个最优调度方案,使2台机器处理完这n个作业的时间最短。

[算法分析]

当完成k个作业,设机器A花费了x时间,机器B所花费时间的最小值肯定是x的一个函数,设F[k][x]表示机器B所花费时间的最小值。则

F[k][x]=Min{F[k-1][x]+b[k],F[k-1][x-a[k]]};其中F[k-1][x]+b[k]表示

第k个作业由机器B来处理(完成k-1个作业时机器A花费的时间仍是x),F[k-1][x-a[k]]表示第k个作业由机器A处理(完成k-1个作业时机器A花费的时间是x-a[k])。

那么单个点对较大值Max(x,F[k][x]),表示此时(即机器A花费x

文档评论(0)

zhanghaoyu888 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档