算法第四章作业
一、你对贪心算法的理解
贪心算法不是在整体最优上进行考虑,而是在对问题求解时,总是做出在当前看来是最好的选择(局部优)
所以贪心策略适用的前提是:局部最优策略能导致产生全局最优解。
在选择使用贪心算法时:
1、先将求解的问题分成若干个子问题。
2、对每一子问题求解,得到子问题的局部最优解。
3、把子问题的解局部最优解合成原来解问题的一个解。
二、请选择一道作业题目说明你的算法满足贪心选择性质
程序存储问题
1、问题描述
设有n 个程序要存放在长度为L的磁带上。程序i存放在磁带上的长度是l,设计一个存储算法,使得能够在磁带上存储尽可能多的程序。
2、贪心选择性质
先将程序n从小到大排序,优先选择较占用磁带较短的程序 => 子问题的局部最优解(做出在当前看来是最好的选择)
将k个磁带占用少的程序由小到大依次放入磁带,直到磁带放不下为止 => 把子问题的解局部最优解合成原来解问题的一个解(产生全局最优解)
3、核心算法
1 sort(a,a+n);//将占用空间从小到大排序 2 3 for(int i = 0;i<n;i++) 4 { 5 if(a[i]<=l) 6 { 7 l -=a[i];//剩余的磁带空间 8 count++;//能放进去的程序 9 } 10 } 11
三、请说明在本章学习过程中遇到的问题及结对编程的情况
在结队编程第一题程序存储问题过程中没有注意看题而只是将占用磁带长度小于L的程序塞了进去,而测试点不周到使得完全正确。在讲解过程中发现没有注意磁带剩余的空间,在判断中加“ l -= a[i] ”才符合题意。
在进行第二道删数问题时没有注意到数字开头有0存在时需要把开头的0都去掉,且有多个0输出时只输出一个0即可的问题。所以之后要注意审题和进行多数据的测试。