和大多数计算机科学的术语一样,贪心算法
(greedy algorithm)策略被命名得非常地契合。被归类为贪心算法的常见模式是:
在做出选择的时候,算法总是选择目前看起来最好的选择。
贪婪策略
通常被用来解决最优化问题
。最优化问题通常包含这些短语之一:什么是最好的、什么是最小的或者什么是最大的。
最优化问题的一个例子是:
如果总共有42美分,那么
最少
有多少个硬币?在美国,你可以选择的硬币有25美分、10美分、5美分、2美分这几个。
这是一个可以用贪婪策略
来解决的问题。贪婪策略
总会选择能够选的最大的硬币。因此从42美分开始,我们先选一个25美分的硬币,还剩下17美分。现在我们可以选择的最大的硬币是10美分的硬币,于是还有7美分。这个时候可以用的最大硬币是5美分的,以及一个2美分的硬币。
使用贪婪策略的步骤
- 首先是确定如何把
贪婪策略
的选择应用于问题。
在我们的硬币例子里,我们决定的贪婪策略是
始终用最大的可能的硬币
。
- 其次是
证明贪婪策略的选择是能够得到最优解的方案
。
贪心算法的不足
遗憾的是,贪婪策略
并不能应用到所有的最优化问题里。考虑这样一个被广泛研究了的问题:旅行推销员问题。给定一组城市之间的直线距离,在总距离最小
的情况下,得出访问所有城市的顺序。一个贪婪策略是从你当前的位置选择最近的城市,然后选择距离它最近的城市,以此类推,直到所有的城市都被访问过为止。这个策略并不会在所有的情况下都找到最短路径。
贪心算法应用
贪心算法
可以被用来实现压缩算法。- 压缩的基本思想是减少数据所需的存储量。
- 压缩有两类:有损(lossy)压缩和无损(lossless)压缩。
顾名思义,当你用
有损压缩
的时候,会丢失一些数据,而且再也没法准确地重现原始数据;相应地,无损压缩
能够让你在解压缩数据的时候得到完整的原始数据。
不论你有没有意识到压缩数据的存在,你都一定使用过压缩数据。大部分音频格式(比如MP3和AAC)都会使用压缩来减少存储以及播放音频文件所需的数据量。类似地,大部分视频也通过压缩格式来进行存储以及传输。数字电视会用有损压缩格式(通常是MPEG-2压缩格式)进行广播;你也可能听说过其他的一些常见的视频压缩格式,比如MPEG-4以及H.264(它是MPEG-4的一种特殊形式)。对于音频和视频应用来说,因为不需要完整的原始数据,所以有损压缩是可以接受的。在压缩比和音频、视频的质量之间会需要一些权衡。只要压缩版本里包含了足够的数据,当数据解压缩之后,音频和视频对于大多数人来说听起来或看起来依然是“足够好”的。在美国,不同的网络使用不同的压缩比,而且在某些情况下,比如体育运动的快速移动场景里,质量的损失是非常明显的。