贪心法课题:贪心法目标:知识目标:贪心的原理递与贪心的实现能力目标:贪心的原理重点:贪心算法的应用难点:贪心的理解板书示意:1)贪心的引入(例24)2)贪心的应用(例25、例26、例27、例28)授课过程:若在求解一个问题时,能根据每次所得到的局部最优解,推导出全局最优或最优目标
那么,我们可以根据这个策略,每次得到局部最优解答,逐步而推导出问题,这种策略称为贪心法
下面我们看一些简单例题
例24:在N行M列的正整数矩阵中,要求从每行中选出1个数,使得选出的总共N个数的和最大
分析:要使总和最大,则每个数要尽可能大,自然应该选每行中最大的那个数
因此,我们设计出如下算法:读入N,M,矩阵数据;Total:=0;ForI:=1toNdobegin{对N行进行选择}选择第I行最大的数,记为K;Total:=Total+K;End;输出最大总和Total;从上例中我们可以看出,和递推法相仿,贪心法也是从问题的某一个初始解出发,向给定的目标递推
但不同的是,推进的每一步不是依据某一固定的递推式,而是做一个局部的最优选择,即贪心选择(在例中,这种贪心选择表现为选择一行中的最大整数),这样,不断的将问题归纳为若干相似的子问题,最终产生出一个全局最优解
特别注意的是是,局部贪心的选择是否可以得出全局最优是能否采用贪心法的关键所在
对于能否使用贪心策略,应从理论上予以证明
下面我们看看另一个问题
例25:部分背包问题给定一个最大载重量为M的卡车和N种食品,有食盐,白糖,大米等
已知第i种食品的最多拥有Wi公斤,其商品价值为Vi元/公斤,编程确定一个装货方案,使得装入卡车中的所有物品总价值最大
分析:因为每一个物品都可以分割成单位块,单位块的利益越大显然总收益越大,所以它局部最优满足全局最优,可以用贪心法解答,方法如下:先将单位块收益按从大到小进行排列,然后用循环从单位块收益最大的取起,直到