- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
课 程 设 计 报 告
课程设计名称: 算法设计与分析
系 : 三 系
学生姓名:
班 级: 软件(2)班
学 号: 201103112
成 绩:
指导教师: 秦 川 刘 玉 龙
开课时间: 2013 学年 2 学期
一、问题描述
1.普通背包装载问题(贪心算法)
给定n种物品和一个背包。物品i的重量是wi],其价值是i],背包的容量是C。应如何选择装入背包的物品,是得装入背包中的物品的总价值最大?在选择装入背包的物品是,对每种物品i的选择可以是物品的的一部分(即可以不是整数),而不一定要全部装入背包,1=i=n(回溯算法)
对于0-1背包问题回溯法一个实例,n=4,c=7, p=[9,10,7,4],w=[3,5,2,1].这4个物品的单位重量价值分别为[3,2,35,4].以物品为单位价值的递减序装入物品。先装入物品4,然后装入物品3和1.装入这3个物品后,剩余的背包容量为1,只能装入0.2的物品2.由此可得到一个解为x=[1,0,2,1,1],其相应的价值为22.尽管这不是一个可行解,但可以证明其价值是最有大的上界。因此,对于这个实例,最优值不超过22.回溯法的基本思想是按深度优先策略,从根节点出发搜索解空间树,算法搜索至解空间的任一点时,先判断该结点是否包含问题的解,如果肯定不包含,则跳过以该结点为根的子树的搜索,逐层向其祖先结点回溯,否则,进入该子树,继续按深度优先进行搜索。(分治算法)
在一个(2^k)×(2^k)个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为特殊方格。显然,特殊方格在棋盘中出现的位置有4^k情形,因而有4^k种不同的棋盘。图a所示是k=2时16种棋盘中的一个。棋盘覆盖问题要求用图b所示的4种不同形状的L型骨牌覆盖给定棋盘上除特殊棋盘方格以外的所有方格,且任何两个L型骨牌不得重叠覆盖。
图1棋盘覆盖骨牌
二、问题分析(贪心算法)
贪心算法的基本思路:从问题的某一个初始解出发逐步逼近给定的目标,每一步都作一个不可回溯的决策,尽可能地求得最好的解。当达到某算法中的某一步不需要再继续前进时,算法停止。这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。(回溯算法)
利用回溯法的设计思想来解决背包问题。首先是将可供选择的物品的个数输入程序,将物品排成一列,计算总物品的体积s,然后输入背包的实际体积V,如果背包的体积小于0或者大于物品的总体积s,则判断输入的背包体积错误,否则开始顺序选取物品装入背包,假设已选取了前i件物品之后背包还没有装满,则继续选取第i+1件物品,若该件物品太大不能装入,则弃之而继续选取下一件,直至背包装满为止。但如果在剩余的物品中找不到合适的物品以填满背包,则说明刚刚装入背包的那件物品不合适,应将它取出弃之一边,继续再从它之后的物品中选取,如此重复,直至求得满足条件的解。因为回溯求解的规则是后进先出,所以要用到栈来存储符合条件的解,在存储过程中,利用数组来存储各个物品的体积,然后用深度优先的搜索方式求解,将符合条件的数组元素的下标存入栈里,最后得到符合条件的解并且实现输出。(分治算法)
分治的技巧在于如何划分棋盘,使划分后的子棋盘的大小相同,并且每个子棋盘均包含一个特殊方格,从而将原问题分解为规模较小的棋盘覆盖问题。先把原始棋盘划分成4个相等的棋盘,由于棋盘只有一个特殊棋盘,所以这4个子棋盘中只有一个子棋盘包含该特殊棋盘,以便采用递归的方法求解,可以用1一个L型骨牌覆盖这3个较小棋盘的汇合处。从而将原问题转换为4个较小规模的棋盘覆盖问题。递归使用这种划分策略,直至将棋盘分割为1*1的子棋盘设计
(贪心算法)
普通背包问题恰好符合贪心算法解决问题的特点:
(1)贪心选择性(问题整体最优解可以通过一系列局部最优的选择来达到。即,通过一系列的逐步贪心选择使得最终的选择方案是全局最优)
(2)最优子结构(原问题的最优解能够包含其子问题的最优解)
因此对于该问题可以用贪心算法解决。
算法设计:首先,按物品单位价值由大到小将物品排序;(为了贪心选择准备)然后,依次将单位价值大的物品放入背包(贪心选择),直到背包放满为止;在向背包放置物品的过程中,如果(回溯算法)
使用栈作为该程序的数据结构,利用栈进行语法检查,以深度优先的搜索方式解空间,实现递归过程和函数的调用,在设计时还使用C语言的数组及其循环语言来实现程序。运用回溯法解题,在搜索解空间树时,只要其左子节点是一个可行结点,搜索就进入左子树,在右子树中有
文档评论(0)