- 1、本文档共66页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
5-10假定要将一组电子元件安装在线路板上,给定一个连线矩阵Conn和一个位置距离矩阵Dist。Conn(i,j)表示元件i和元件j之间的连线数目。如果将元件i安装在位置r处,
将元件j安装在位置s处,则元件i和元件j之间的距离为Dist(r,s)。将这n个元件各自放在线路板的某位置上就构成一种布线方案,布线成本为 。试设计一个算法,找出所给n个元件的布线成本最小的方案。5-11假设有n个要执行的作业,但只有k个可以并行的处理器,作业i用ti时间可以完成。试设计一个算法,找出完成这n个任务的最佳调度,使得完成全部任务的时间最早,即确定哪些作业按照什么次序在哪些处理器上运行,使得完成全部作业的最后时间最早。
5-12设有12个平面图形,每个图形由5个大小相同的正方形组成,每个图形的形状与别的图形不同。图5-15中用12个这种图形拼成了一个6×10的长方形。试设计算法,找
出将这些图形拼成6×10的长方形的全部方案。图5-15一种拼图方案SUBSET-SUM(S,p,s,k,r) //前k-1个xi值已确定
1 x[k]?1 //生成左孩子
2 ifs+p[k]=S //如果条件为真,表明找到解
3 thenoutputx1,x2,…,xk,0,…,0//输出问题解
4 elseifs+p[k]+p[k+1]?S //测试递归调用的条件
5 thenSUBSET-SUM(S,p,s+p[k],k+1,r-p[k]) //前k个xi值已确定,且xk?1
6 ifs+r–p[k]?Sands+p[k+1]?S //生成右孩子
7 thenx[k]?0
8 SUBSET-SUM(S,p,s,k+1,r-p[k])//前k个xi值已确定,且xk?0
9 return2.子集和数问题算法示例
图5-9显示本小节例子n=6,(p1,p2,p3,p4,p5,p6)=(5,10,12,13,15,18),S=30,运行算法SUBSET-SUM后,所生成状态空间树的部分结果。初始时,s=0,k=1,r= 图5-9算法SUBSET-SUM所生成状态空间树的一部分回溯法的一般执行步骤如下:
(1)定义一个解空间,它包含问题的解。
(2)用适于搜索的方式组织该空间。
(3)用深度优先法搜索该空间,利用限界函数来避免移动到不可能产生解的子空间。 5.40-1背包问题
1.0-1背包问题及回溯算法示例
再次考虑0-1背包问题(0-1knapsackproblem)。某商店有n个物品,第i个物品价值为vi,重量(或称权值)为wi,其中vi和wi为非负数。背包的容量为W,W为一非负数。目标是如何选择装入背包的物品,使装入背包的物品总价值最大。可将这个问题形式描述为
约束条件为我们使用定长元组表示法。如果在结点Z处,已经确定了xi的值,1≤i≤k,则可在条件0≤xi≤1下,用第4章中的贪心算法求解结点Z处的解作为限界函数BOUND,k+1≤i≤n。
BOUND(cv,cw,k,W)//k:上次去掉的物品
1 b?cv//cv:当前价值总量
2 c?cw//cw:当前背包占用权值
3 fori?k+1ton
4 doc?c+w[k]
5 ifcW
6 thenb?b+v[i]
7 elsereturn(b+(1–(c–W)/w[i])v[i])第1~2行进行初始化。第3~7行的while循环计算背包获得的价值。第7行中1-(c-W)/wi表示最后放入背包的物品比例。
由算法BT-KNAPSACK可见,只有在经过一系列左孩子结点之后,才需要调用限界过程BOUND。
BT-KNAPSACK(W,n,w,v,fw,fv,X)
1 cw?cv?0//cw:背包当前已用权值,cv:背包当前总价值
2 k?1
3 fv?–1//fv:背包的最大值,初始化为–1
4 do
5 whilek?nandcw+w[k]?Wdo//测试物品k是否可以放入背包
6 cw?cw+w[k]//修改当前
文档评论(0)