算法分析与设计期末复习(第四章)

第四章 贪心策略

1. 贪心算法的特点

(1) 顾名思义,贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的 局部最优选择
(2) 贪心算法 不能对所有问题都得到整体最优解
(3) 在许多情况下,应用贪心算法能够得到整体最优解;在一些情况下,即使贪心算法不能得到整体最优解,其最终结果却是最优解的很好近似
(4) 贪心算法中,较大子问题的解恰好包含了较小子问题的解作为子集。
(5) 贪心算法在某一步决定优化函数的最大或最小值时,不考虑子问题的计算结果,而是根据当时情况采取“ 只顾眼前 ”的贪心策略决定取舍。

2. 贪心算法设计举例

       一般地,有这样一类问题:它有n个输入,而它的解就由这n个输入的某个子集组成,只是这个子集必须满足某些事先给定的条件。把那些必须满足的条件称为约束条件;而把满足约束条件的子集称为该问题的可行解。为了衡量可行解的优劣,事先给出了一定的标准。一般以函数形式给出,称为目标函数。那些使目标函数取极值(极大或极小)的可行解,称为最优解

eg:用贪心法求解货币兑付问题。设支付现金

       A=25.9元,支付集合P= {1051

       0.5,0.20.1元各10} 

解:最少货币张数 贪心选择货币面值大者。

 s =  ф

 s = {10}                                15.9

 s = {10,10}                              5.9

 s = {10, 10, 5, 0.5, 0.2, 0.2}            0

目标函数: MIN | 可行解 |
约束条件:  Y=25.9
可行解:   所有满足约束条件的集合,如 {10,5,5,5,0.2,0.2,0.2,0.2,0.1}……
最优解:      使目标函数达到极值的可行解,如  {10,10,5,0.5,0.2,0.2}

     贪心法也是一个多步决策法。每一步选择都使得能构成问题的一个可行解,同时使目标函数的值增加最快(求max)或增加最小(如求min),这种选择过程是以某些最优量度为根据,而最优化量度有时可以是目标函数本身,也可以是别的量度。最优化度量的选择是贪心算法的关键。

3. 贪心算法的设计要素

可以用贪心算法求解的问题一般具有 2 个重要的性质:
最优子结构性质。
 
         § 当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。问题的最优子结构性质是该问题可用动态规划算法或贪心算法求解的关键特征。
 
贪心选择性质
 
                § 贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到。
§ 贪心选择每次选取当前最优解,因此它依赖以往的选择,而不依赖于将来的选择。
§ 贪心算法通常以 自顶向下 的方式进行,以迭代的方式作出相继的贪心选择,每作一次贪心选择就将所求问题简化为规模更小的子问题。
§ 对于一个具体问题,要确定它是否具有贪心选择性质,必须 证明 每一步所作的贪心选择最终导致问题的整体最优解。

证明正确性的方法:算法步数的归纳、问题规模的归纳。

4. 应用实例

(1)背包问题

问题描述:给定n个物品和一个背包。物品i的重量为wi,价值为vi,背包容量为C。问如何选择装入背包中的物品,使得装入背包的物品的价值最大?

        在装入背包时,每种物品i只有两种选择,装入或者不装入,既不能装入多次,也不能只装入一部分。因此,此问题称为0-1背包          问题。

        如果在装入背包时,物品可以切割,即可以只装入一部分,这种情况下的问题称为背包问题。

2类问题都具有最优子结构性质,极为相似,但背包问题可以用贪心算法求解,而0-1背包问题却不能用贪心算法求解。

0-1背包问题与背包问题:

算法分析与设计期末复习(第四章)_第1张图片

背包问题的形式描述:

算法分析与设计期末复习(第四章)_第2张图片

实例:

算法分析与设计期末复习(第四章)_第3张图片

度量标准的选择:三种不同的选择

(a)以价值作为度量

(b)以容量作为度量

(c)最优的度量标准(每一单位容量能获得当前最大的单位效益)

最优解的证明

贪心解是可行解,故只需证明:贪心解可使目标函数取得极值。      

 

你可能感兴趣的:(算法分析与设计,算法,贪心算法)