理解贪心算法
贪心算法是一种算法思想,并不是一个具体的算法,因此我们用两个例子来理解什么样的问题适合用贪心算法解决。
例一
现在有一个能装 100g 物品的背包,和一些可拆分的物品(见表格),怎么装才能使背包中物品价值最大?
物品 | 重量 | 价值 |
---|---|---|
A | 100g | 100 |
B | 60g | 120 |
C | 50g | 150 |
D | 20g | 50 |
容易想到的方法是通过计算物品单价,从高到低往背包中放。
例二
在一个加权有向图中,求 A 到 G 的最短距离。
若依旧使用例一中的方法,则找到的路径是 A->B>D>E>G,明显不是最短的路径。
综述
例一和例二的相同点:
- 要得到最终的结果,都需要多次决策,
比如例一中每次决策选择一个物品,例二中每次决策选择一条路。
例一和例二的区别:
- 例一中每次决策都不会影响后续的决策范围,即选择了一个物品后,下次选择范围仍然是所有物品,而例二中,第一次决