如果一个问题在求解的每一步都存在一种最优的解法,那么就可以使用贪心算法来处理。

典型的贪心算法应用就是田忌赛马问题,田忌只要在每局比赛中派出稍微比齐威王的马快一点的马去对位,如果手上的马都没齐威王的快,就用最差的马去对位,这样总能保证能以最小代价赢下或输掉这局比赛且剩余的马的实力是最优的,也就最有可能赢得全部的比赛。

使用贪心算法要确保能证明其正确性,也就是每一步都有最优解。有些问题当前步骤的最优解还依赖后续步骤的状态,也就是不到最后一步不知道什么是最优的,这种就没法使用贪心去解决,而是该使用动态规划,比如1770. 执行乘法运算的最大分数 - 力扣(LeetCode)这题,这里,每次从左右里选一个,貌似可以用贪心拿到每次的最优解,但是其实是错误的,有可能上一步的最优解把下一步更优的解排除了,所以不到最后一步,都无法确定哪个是最优的,也就不能应用贪心算法来求解。

  • 无标签