算法设计与分析 第2版 第5章-回溯法.ppt

算法设计与分析 第2版 第5章-回溯法.ppt

  1. 1、本文档共151页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * void main() { for (int i=1;i=n;i++) x[i]=i; dfs(1); //i从1开始搜索 dispasolution(); //输出结果 } 最优调度方案 选取活动1: [1,3) 选取活动3: [4,8) 安排活动的个数=2 活动编号 1 2 3 4 开始时间 1 2 4 6 结束时间 3 5 8 10 【算法分析】该算法对应解空间树是一棵排列树,与求全排列算法的时间复杂度相同,即为O(n!)。 5.9 求解流水作业调度问题 【问题描述】有n个作业(编号为1~n)要在由两台机器M1和M2组成的流水线上完成加工。每个作业加工的顺序都是先在M1上加工,然后在M2上加工。M1和M2加工作业i所需的时间分别为ai和bi(1≤i≤n)。 流水作业调度问题要求确定这n个作业的最优加工顺序,使得从第一个作业在机器M1上开始加工,到最后一个作业在机器M2上加工完成所需的时间最少。可以假定任何作业一旦开始加工,就不允许被中断,直到该作业被完成,即非优先调度。 【输入格式】输入包含若干个用例。每个用例第一行是作业数n(1≤n≤1000),接下来n行,每行两个非负整数,第i行的两个整数分别表示在第i个作业在第一台机器和第二台机器上加工时间。以输入n=0结束。 【输出格式】每个用例输出一行,表示采用最优调度所用的总时间,即从第一台机器开始到第二台机器结束的时间。 【输入样例】 4 5 6 12 2 4 14 8 7 0 【输出样例】 33 POJ2751 【问题求解】采用回溯法求解,对应的解空间是一个是排列树,相当于求出n个作业的一种排列使完成时间最少。 n个作业的某个排列:最优解 完成时间最少 n个作业的全排列 符号表示 i x[i] j … 设置第i步执行的作业j:x[i]=j 1 … j 解空间树 x[1] f1数组:f1[i]表示第i步执行的作业x[i]在M1上执行完的总时间(含前面作业的执行时间) f2数组: f2[i]表示第i步执行的作业x[i]在M2上执行完的总时间(含前面作业的执行时间) ? 一种排列(调度方案)的时间计算 x={ x[1], x[2], … x[i], … , x[n] } 第i步执行的作业 由于一个作业总是先在M1上执行后在M2执行,所以f2[n]就是执行全部作业的总时间。 一个示例,假设有3个作业: 作业1 作业1 M1 M2 f1[0]=0 f2[0]=0 作业2 作业3 作业1在M2不等:f2[1]=f1[1]+b[1]=3 f1[1]=f1[0]+2=2 f1[2]=f1[1]+3=5 f1[3]=f1[2]+2=7 作业2 作业2在M2不等:f2[2]=f1[2]+b[2]=6 作业3 作业3在M2不等:f2[3]=f1[3]+b[3]=10 由于每个作业都是从M1开始的,即M1上各个作业是连续执行的,不需要等待,所以f1不需要用数组表示,直接用单个变量f1表示。 该调度方案的总时间: 10 现在的调用方案为x=(1,2,3),即按作业1、2、3的顺序执行。首先将f1和f2数组所有元素初始化为0。该调度方案的总时间计算如下: 再看看另外一种调用方案x=(3,1,2) 。该调度方案的总时间计算: 作业1 M1 M2 f1=0 f2[0]=0 作业3在M2不等:f2[1]=f1+b[3]=5 f1=f1+2=2 f1=f1+2=4 作业2 f1=f1+3=7 作业1 作业1在M2要等:f2[2]=f2[1]+b[1]=6 作业3 作业3 作业2 作业2在M2不等:f2[3]=f1+b[2]=8 该调度方案的总时间: 8 x=(x[1],x[2],…,x[i], … ,x[n]) 第i步执行的作业为x[i] 作业1 M1 M2 f1=0 f2[0]=0 作业3在M2不等:f2[1]=f1+b[3]=5 f1=f1+2=2 f1=f1+2=4 作业2 f1=f1+3=7 作业1 作业1在M2要等:f2[2]=f2[2]+b[1]=6 作业3 作业3 作业2 作业2在M2不等:f2[3]=f1+b[2]=8 第i步

文档评论(0)

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

本文库主要涉及建筑、教育等资料,有问题可以联系解决哦

版权声明书
用户编号:5213302032000001

1亿VIP精品文档

相关文档