如何理解贪心算法?
假设有一个可以容纳100kg物品的背包,可以装各种物品。有以下5种豆子,每种豆子的总量和总价值都各不相同。为了让背包中所装物品的总价值最大,如何选择在背包中装哪些豆子?每种豆子又该装多少呢?
这个问题很简单,只要先算每个物品的单价,按照单价由高到低依次来装就好了。
贪心算法解决问题的步骤
第一步,针对一组数据,定义了限制值和期望值,希望从中选出几个数据,在满足限制值的情况下,期望值最大。
如上例子,限制值就是重量不超过100kg,期望值就是物品的总价值。
第二步,每次选择当前情况下,在对限制值同等贡献量的情况下,对期望值贡献最大的数据。
如上例子,每次选择单价最高的,也就是重量相同的情况下,对价值贡献最大的豆子。
第三步,举几个例子验证一下贪心算法的正确性。
用贪心算法解决问题的思路,并不总能给出最优解
依照贪心算法,求出的最短路径是S->A->E->T,路径长度是1+4+4 = 9
正真的最短路径是S->B->D->T,路径长度是2+2+2 = 6
贪心算法实战分析
分糖果
钱币找零
区间覆盖