贪心算法,又名贪婪法,是一种寻找最优解问题的常用方法。贪心算法在每一步总是选择当前状态下最好/最优的选择(局部最有利的选择),希望通过这种策略,最后得到的问题整体解决方案也是最优的。
贪心算法的实现步骤通常如下:首先建立数学模型来描述问题,然后把求解的问题分成若干个子问题。接下来对每个子问题求解,得到子问题的局部最优解。最后将子问题的局部最优解合成原来问题的解。
比如货币找零问题,假设我们在超市买了69元的商品,给了收银员100元,则收银员需要找我们31元,他会很自然的完成以下思考:
1.可选项是比31元面值更小的货币,包括1元,5元,10元和20元。
2.从可选项中拿出最大的20元,剩下31-20=11元。
3.从剩下的可选项中拿出最大的10元,剩下11-10=1元。
4.从剩下的可选项中拿出最大的1元,剩下1-1=0元。
5.完成找零,方案为20+10+1=31元。
在以上步骤中,我们每一步都采取了当前看来最好的选择(尽可能使用大面额的货币),最终得到了可行的找零方案。