- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编号
学生实习报告
2013~2014学年 第 一 学期
实 习 类 别
课程设计
学 生 姓 名
姜兆龙
专 业
软件工程
学 号
110521118
指 导 教 师
崔广才
学 院
计算机科学技术
2013年 1 月
起 止 周
19~20
周 数
2
实习地点
计算机学院实验室
实训目的:
通过两周的课程设计,实现回溯法解决背包问题的方法,达到巩固理论知
识、锻炼实践能力、构建合理知识结构的目的。
实训要求:
利用回溯法解决背包问题
理解堆栈原理,回溯的调用时机和参数确定
实训进度安排及主要内容:
第一周:
分析题目要求,整理思路
理解堆栈和回溯原理
第二周:
编写简单测试程序
界面化
成绩:
指导教师/带队教师(签字)
年 月 日
一 概述
问题:回溯法背包问题求解。
问题描述:假设有一个能装入总体积为T的背包和n件体积分别为w1 , w2 , … , wn 的物品,能否从n件物品中挑选若干件恰好装满背包,即使w1 +w2 + … + wn=T,要求找出所有满足上述条件的解。例如:当T=10,各件物品的体积{1,8,4,3,5,2}时,可找到下列4组解:(1,4,3,2),(1,4,5),(8,2),(3,5,2)。
主要解决点:递归函数的递归参数和递归内容
二 设计的基本概念和原理
式中x为0-1决策变量,x=1时表示将物品i装入背包中,x=0时则表示不将其装入背包中。
栈的原理:栈(Stack)是限制仅在表的一端进行插入和删除运算的线性表。当用一维数组存储栈时,被称为顺序栈。 (1)通常称插入、删除的这一端为栈顶(Top),另一端称为栈底(Bottom); (2)当表中没有元素时称为空栈,用Top=1表示; (3)栈为后进先出(Last In First Out)的线性表,简称为LIFO表。
栈的修改是按后进先出的原则进行。每次删除(退栈)的总是当前栈中最新的元素,即最后插入(进栈)的元素,而最先插入的是被放在栈的底部,要到最后才能删除。
栈为后进先出(Last In First Out)的线性表,简称为LIFO表。栈的修改是按后进先出的原则进行。每次删除(退栈)的总是当前栈中最新的元素,即最后插入(进栈)的元素,而最先插入的是被放在栈的底部,要到最后才能删除。流程图如下:
Push(进栈)
a0 a1 …… a n-1
Pop(出栈)
top(栈顶)
回溯法:
三 总体设计
使用语言:Java
界面化展示:Android
实现方法
利用回溯法的设计思想来解决背包问题。首先将物品排列成一列,然后顺序选取物品装入背包,假设已选取了前i件物品后背包还没装满,则继续选取第i+1件物品,若该件物品“太大”不能装入,则弃之而选取下一件,直到背包装满为止。但如果在剩余的物品中找不到合适的物品以填满背包,则说明上一个装入背包的物品在此种情况下不是最优选择,将其去掉形成新的栈,继续再从他下一个物品中选取,如此重复,直到求得满足条件的解,或者无解。由于回溯法求解的规则是“后进先出”因此自然要用到栈。
(1)主要功能模块实现
递归参数确定: 数据位置,当前结果集总重量
物品数据通过List方式存储,每个物品都存在两个属性,“编号”和“是否用过”。那么,每次递归首先要记录的就是本次操作执行时,当前的操作数编号。以编号方式代替数据,类似于数据库中的数据id亦或是Map映射中的key与value的关系。其次,每次操作主要是重量的比较,那么,当前结果集的重量和剩余重量都是重要参数,由于整体操作是向结果数据及栈中增加数据,每次操作是与背包容量进行比较,因此,选择当前结果集总重量。
递归主体:得到当前栈中的最后一个数的数据位置,和当前结果集总重量,从上一个位置开始遍历,遍历剩余的产品,如果此数在备选项中且没有被使用,同时,此物品重量小于或等于背包容量,则将此物品的序号计入相应的位置数组中,继续向下执行,如果当前结果集总重量加上此物品重量刚好等于背包容量,者通过位置数组输出数据,这便是一组符合要求的结果,如果不等,设置此数据为被使用并将当前结果总重量和位置加一递归此函数。
递归堆栈演示图:
演示数据: 背包重量 5 物品重量 1,2,3,4
得到第一组结果:(1 ,4)
一次循环结束,进行下一次循环,第一次进入2作为结果集的第一个数。
您可能关注的文档
最近下载
- 招标代理机构入围 投标方案(技术方案).docx
- GB 50017-2003 钢结构设计规范.docx VIP
- 2025年湖南劳动人事职业学院单招语文考试模拟试题及答案解析.pdf VIP
- 高中物理游标卡尺、千分尺、螺旋测微器读数习题.docx VIP
- 湖南劳动人事职业学院单招测试题(附解析)英语.pdf VIP
- 重磅——2017年全国卷文言文挖空训练学生版及教师版.pdf VIP
- 大班《闽南红砖古厝》.pptx VIP
- 2024贵州黔南州面向优秀村(社区)干部专项招聘乡镇(街道)事业单位工作人员35笔试备考题库及答案解析.docx VIP
- 2025共青团入团考试题库及完整答案.pdf
- 3 雪地里的小画家 课件(共21张PPT).pptx VIP
原创力文档


文档评论(0)