贪心算法计算最优分解方案_第1页
贪心算法计算最优分解方案_第2页
贪心算法计算最优分解方案_第3页
贪心算法计算最优分解方案_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 西 安 邮 电 大 学 (计算机学院)课内实验报告实验名称: 贪心算法计算最优分解方案 专业名称: 班 级: 学生姓名: 学号(8位): 指导教师: 实验日期: 2016年6月1日一. 实验目的及实验环境 实验目的: 熟悉并掌握贪心算法 实验环境: windows7 vc6.0编译器二. 实验内容题目描述: 设n是一个正整数。现在要求将n分解成干互不相同的自然数的和,且使这些自然数的成绩最大。算法设计:对于给定的正整数n,编程计算最优分解方案。三方案设计问题分析:若a+b=n,则|a-b|越小,那么,a*b越大。贪心策略:将n分解成从2开始的连续自然数的和,优先的方式下均匀地分给前面各项。如

2、果最后剩下一个数,将此数加到后项中。例如: 对于8进行分解为2和3则剩下一个3; 然后2和3再分别从3中均匀地获得1最后变成3和4,最后剩下1加给4上。所以,最终分解成3和5,是8的分解为不相同的自然数乘机最大。 程序流程图:开始输入n,k=1,sum=1n5 ? 否 是 k+;ak = ak - 1 + 1;n = n - ak;nak ?a1 = 2;n -= 2;是 for (i = 0; i n; i+)ak - i+;for (i = 1; i = k; i+)sum *= ai;n = ak ? 否 是 ak+; n-;输入sum结束四测试数据及运行结果1正常测试数据(3组)及运行

3、结果;五总结1 实验过程中遇到的问题及解决办法;问题:逻辑不清晰。解决办法:画出流程图2对设计及调试过程的心得体会。贪心算法是从问题的某个初始解出发逐步,逼近给定的目标,以尽可能快地求得更好的解。当达到某一步不能继续前进时,算法停止。这时就得到了问题的一个解。但不能保证求得的解是最优的。贪心算法的优点在于时间复杂度低。贪心算法与其他最优化算法的区别在于:它具有不可后撤性,可以有后效性,一般情况下,不能满足最优化原理。贪心算法的特点就决定了它的使用范围,它一般不适用于解决可行性问题。仅适用于较容易得到可行性解得最优性问题。(这里较容易得到可行解得概念: 当前的策略选择后,不会或极少出现无解的情况

4、。 交互性题目,贪心算法是一个较好的选择。)六附录:源代码(电子版)/*用贪心算法解题: 设n是一个正整数。现在要求将n分解为若干互不相同的自然数的和,且使这些自然数 的乘积最大*/#define _CRT_SECURE_NO_WARNINGS#includevoid taixin(int n)int a100;/临时数组,保存分解后的数int k = 1;/a数组的索引int sum = 1;/最大乘积int i;/索引if (n ak)k+;ak = ak - 1 + 1;n = n - ak; if (n = ak)ak+;n-;/让最后一个先加1, 其实算上后面的是加了2for (i = 0; i n; i+)ak - i+;for (i = 1; i = k; i+)sum *= ai;printf(分解后的数:);for (i = 1; i =k; i+)printf(%d ,ai);printf(n最大的成绩: %d, sum);getchar();void main()int n;char str50;sprintf(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论