大家好,我们又见面了。我们继续学习c++
大纲
1.引入
2.最优装载
3.部分背包
4.案例练习
1.引入
最优路径
问题描述:从下面的交通图中,找到一条最便宜的从合肥到北京的方式。
① 最优化问题。 ② 经过一系列步骤。
③ 每一步都做出当前最佳选择。 ④ 局部最优解最终能得到全局最优解。
2.最优装载
贪心算法:求解最优化问题的算法通常需要经过一系列的步骤,在每个步骤都面临多种选择。贪心
算法是这样一种算法,它在每一步都做出当时看起来最佳的选择,也就是说它总是做出局部最优的
选择,寄希望这样的选择能导致全局的最优解。
问题描述:有一批N个物品,第i个物品的重量为𝑊 𝑖 ,有一辆载重量为C的卡车,在不考虑体积的情况下,该卡车最多可以装载多少物品?
有四个物品
四个物品的重量:
1kg 2kg 4kg 6kg
C=8
示例:如上图中N = 4, C = 8时,最多可以装在3个物品。
由于该问题只关心物体的数量,所以装重的没有装轻的划算。只需要把物品按重量从小到大排
序,然后优先选择重量轻的物品,直到重量超过C为止。
由于该问题只关心物体的数量,所以装重的没有装轻的划算。只需要把物品按重量从小到大排
序,然后优先选择重量轻的物品,直到重量超过C为止。
装载步骤:
① 从4个物品中挑出一些放到载重量为8的卡车上,要求挑出的物品数量尽可能的多。
② 从3个物品中挑出一些放到载重量为7的卡车上,要求挑出的物品数量尽可能的多。
③ 从2个物品中挑出一些放到载重量为5的卡车上,要求挑出的物品数量尽可能的多。
④ 从1个物品中挑出一些放到载重量为1的卡车上,要求挑出的物品数量尽可能的多。
贪心要素:
贪心选择性质:问题的整体最优解可以通过一系列局部的最优选择得到。
最优子结构:当问题的最优解包含其子问题的最优解时称该问题具有最优子结构性质。
2.部分背包
问题描述:有一批N个物品,第i个物品的重量为𝑊 𝑖 ,价值为𝜈 𝑖 ,有一辆载重量为C的卡车,每
一个物品可以只取走一部分,价值和重量按比例计算,该卡车最多可以装载多大价值的物品?
该问题物品同时具有重量和价值属性,所以不能简单地像上一题那样先拿轻的(轻的可能
价值也小),也不能简单的拿价值大的(可能它特别重),而应该综合考虑两个因素。一
种直观的贪心策略是:优先拿“单位重量价值”最大的,直到重量和正好为𝐶 。
① 将所有物品按照𝜈 𝑖 /𝑤 𝑖 从大到小排序,即:按照单位重量价值从大到小排序。
② 按照𝜈 𝑖 /𝑤 𝑖 从大到小的顺序取物品,直到所拿物品的重量达到C。
贪心选择:优先选择单位价值较高的物品。