1. 贪婪算法
1.1 算法思路
贪婪算法的思想很简单:每步都采取最优的做法,以教室调度为例进行说明该算法步骤。
假设有以下课表,希望将尽可能多的课程安排在同一个教室:
由于不同课的开始与结束时间存在冲突,所以不可能把所有课放在一个教室上。使用贪心算法的解决思路如下:
- 选出结束最早的课,它是上的第一堂课。 此时选择美术课
- 接下来选择第一堂课结束后才开始的课。同样,你选择结束最早的课,这将是要第二堂课。此时选择数学课。
- 重复步骤二,此步得到音乐课
于是使用贪婪算法得到的结果就是:美术-》数学-》音乐。
1.2 例外情况
贪婪算法并不适合所有的场景,例如背包问题。背包问题描述如下:
- 假设一个背包可以放35磅重的东西,你试图通过该背包尽可能装入总价值最高的商品
- 商品的列表如下:
- 音响:3000美元,30磅
- 电脑:2000美元,20磅
- 吉他:1500美元,15磅
按照贪婪算法,每步都选择最优方案的话,则第一步将会选择音响,此时总价值为3000美元,背包还剩5磅的空间,然后其他的物品超过了5磅,所以也不能再进行选择。
如果选择电脑+