最小重量器设计问题、工作分配问题.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
最小重量器设计问题、工作分配问题

《算法设计与分析》 上 机 实 验 报 告 专 业 班 级 学 号 学生姓名 完成日期 1. 上机题目及实验环境 1.1上机题目: 最小重量机器设计问题 工作分配问题 1.2实验环境: CPU:Pentium Core CPU 3.20 GHz 内存:3.21 GB 操作系统:Windows XP 软件平台:Visual C++ 算法设计与分析 2.1 总体思想 回溯法(探索与回溯法)是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法。由此可知,解决下面两个问题时,可以使用回溯法。 2.2 最小重量机器设计问题细节处理 将问题封装成一个类来处理; 采用二维数组存储各部件的价格和重量; 选择部件时都优先考虑编号小的供应商; 在处理选择操作时,先考虑当前情况是否满足要求,再进行选择操作; 退回上一步时,需要还原临时价格tempC和临时重量tempW的值。 2.3 工作分配问题细节处理 将问题封装成一个类来处理; 采用二维数组存储员工对应各工作的费用; 采用一位数组来记录员工安排工作的状态,0为未分配,1为已分配; 退回上一步时,需要还原员工安排工作状态。 3. 核心代码 3.1 最小重量机器设计问题 void Design(int i) // 回溯算法,选择部件 { int j, k; if (i n) // 得到一次符合条件的选择 { if (tempW minWeight) { minWeight = tempW; for (j = 1; j = n; j++) bestChoice[j] = choice[j]; } return; } for (k = 1; k = m; k++) // 从1号厂商开始选择每个部件 { choice[i] = k; if ( ( ( tempW + weight[i][choice[i]] ) minWeight ) ( ( tempC + cost[i][choice[i]] ) = d ) ) { //如果之前的重量+当前零件的重量小于最小重量,并且之前价值+零件的价值小于等于最大允许价值 tempW += weight[i][choice[i]]; tempC += cost[i][choice[i]]; Design(i + 1); tempW -= weight[i][choice[i]]; //恢复到上一步 tempC -= cost[i][choice[i]]; } } } 3.2 工作分配问题 void Plan(int i,int tempC) // 回溯算法,安排工作 { if (i n tempC minCost) // 当查找到底层时 { minCost = tempC; return; } if (tempC minCost) // 当查找没到底层时 for (int j = 1; j = n; j++) if (isJob[j] == 0) // 在还没有安排工作的员工中安排 { isJob[j] = 1; Plan(i+1, tempC + cost[i][j]); isJob[j] = 0; // 安排失败,还原 } } 4. 运行与调试 4.1 最小重量机器设计问题 ?给定的测试数据,运行结果如下图1: ?不能满足条件的测试数据,运行结果如下图2: 图1 给定测试数据运行结果 图2 不满足条件的运行结果 ?满足条件的测试数据,运行结果如下图3: 图3 满足条件的运行结果 4.2 工作分配问题 ?给定的测试数据,运行结果如下图4: ?当n=1时的运行结果,如下图5: 图4 给定数据运行结果 图5 n=1时的运行结果 ?当n1且n=20时的运行结果如下图6: 图6 运行结果 5. 结果分析和小结 5.1 结果分析: 通过对不同的数据的测试,能确定程序在一定范围内的正确性、算法思想的正确性和可行性。但在工作分配问题的数据设计上,当员工的人数在[15,20]区间内时,程序运行的时间明显过久,想必是因为程序使用的是递归。 5.2 心得体会: 通过对以上两个问题的分析和设计,我学会了回溯法的设计思想,能掌握使用回溯法解决问题,

文档评论(0)

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

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

1亿VIP精品文档

相关文档