贪心算法的实验报告.docVIP

  • 48
  • 0
  • 约2.33千字
  • 约 6页
  • 2018-03-31 发布于河南
  • 举报
贪心算法的实验报告

福建工程学院计算机与信息科学系 实验报告– 2013 学年第 一 学期 任课老师: 章静 课程名称 结构化程序设计 班级 座号 姓名 实验题目 实验2 贪心算法设计技术的应用 实验时间 实验开始日期:2012-12-11 报告提交日期:2012-12-25 实验目的、要求 一、算法设计技术 贪心策略是指从问题的初始状态出发,通过若干次的贪心选择而得出最优值(或较优解)的一种解题方法。 例找零钱一个小孩买了价值少于1美元的糖,并将1美元的钱交给售货员。售货员希望用数目最少的硬币找给小孩。假设提供了数目不限的面值为分、10美分、5美分、及1美分的硬币。售货员分步骤组成要找的零钱数,每次加入一个硬币。选择硬币时所采用的贪如下:每一次选择应使零钱数尽量增大。为保证解法的可行性(即:所给的零钱等于要找的零钱数),所选择的硬币不应使零钱总数超过最终所需的数目。 其实,从“贪心策略”一词我们便可以看出,贪心策略总是做出在当前看来是最优的选择,也就是说贪心策略并不是从整体上加以考虑,它所做出的选择只是在某种意义上的局部最优解,而许多问题自身的特性决定了该题运用贪心策略可以得到最优解或较优解。可以证明采用上述贪心算法找零钱时所用的硬币数目的确最少。 利用贪心策略解题,必须考虑两个问题,首先,问题是否适合于用贪心策略求解;其次,是在确定了可以用贪心策略之后,如何选择一个贪心标准,才能保证得到问题的最优解。例2背包问题。现有载重为M公斤的背包和n种货物。第i种货物的重量为Wi,它的总价值为Pi,假定M、Wi、Pi均为整数。采用怎样的装货方法,才能使装入背包的货物总价值达到最大?【分析】当货物总重量∑Wi小于或等于M时,把所有货物装入,总价值就达到最大。因此,关键是解决当总重量大于M时装货的方法。我们先从一个具体例子入手来研究一下本题的特点。 设n=3;M=20。 W1=15 W2=10 W3=8 P1=18 P2=15 P3=10 有几种可能解(设Xi为第i种货物所取的重量): X1 X2 X3 总重∑Xi 总价值∑PiXi/Wi (1) 10 5 5 20 25.75 (2) 10 10 0 20 27 (3) 2 10 8 20 27.4 (4) 4 0 16 20 22.4 显然第3个解总价值最大。上述可能解是采用穷举方法试探所得众多可能解中的4种,这在具体的程序编制和实现过程中相当麻烦,且在时间复杂度上很难承受,是否可以寻找到一种简单而又时间效率高的方法呢?下面用策略来解此题。首先应该确定的量度标准。一种设想是按价值大小作为标准,先放价值最大的货物,再放价值次大的货物。即按价值从大到小顺序放置。则有方案:P1P2P3 ∴放置顺序为X1,X2,X3取X1=15,X2=5,得到∑P=X1P1+X1P2=18+7.5=25.5得到的不是最优解。表明用价值作为量度标准是错误的。原因是什么呢?原因是价值大的重量也大,我们按价值大的先放,造成重量消耗过快。由此启发我们用Pi/Wi(单位重量价值)来作量度标准,则有:U1=P1/W1=1.2 U2=P2/W2=1.5 U3=P3/W3=1.25 因此放置顺序是X2,X3,X1,即有:X2=10 X3=8 X1=2 ∑XiUi=15+10+2.4=27.4 这才是最优解。下面给出算法的简单描述: B 读入数据; 计算货物的单位重量价值Ti=Pi/Wi,并将它们从大到小排序; 依次选择单位重量较大的货物装入背包,直至不能装入; 输出最大价值总和S和装货方案; End;背包问题。现有载重为M公斤的背包和n种货物。第i种货物的重量为Wi,它的总价值为Pi,假定M、Wi、Pi均为整数。装货方法,使装入背包的货物总价值达到最大面值为、、 (2)第二题 所有函数的简要说明: 第一题: ① 定义一个结构体,来存放输入的货物数据 Input(int n) ②对单位重量价值Ti进行排序(冒泡排序) Sort(int n) ③将排好序的货物放入背包,得到最佳放置方案 Put_in(int n,int M) 第二题: ①计算顾客购买商品的钱数 float count() ②收银员根据

文档评论(0)

1亿VIP精品文档

相关文档