第一章、贪心算法(Greedy Algorithm) 简介
贪心算法,又名贪婪法,是寻找最优解问题的常用方法,这种方法模式一般将求解过程分成若干个步骤,但每个步骤都应用贪心原则,选取当前状态下最好/最优的选择(局部最有利的选择),并以此希望最后堆叠出的结果也是最好/最优的解。{看着这个名字,贪心,贪婪这两字的内在含义最为关键。这就好像一个贪婪的人,他事事都想要眼前看到最好的那个,看不到长远的东西,也不为最终的结果和将来着想,贪图眼前局部的利益最大化,有点走一步看一步的感觉。}
贪婪法的基本步骤:
步骤1:从某个初始解出发;
步骤2:采用迭代的过程,当可以向目标前进一步时,就根据局部最优策略,得到一部分解,缩小问题规模;
步骤3:将所有解综合起来。
第二章、问题描述
背包最大价值问题
有一个背包,最多能承载重量为 C=150的物品,现在有7个物品(物品不能分割成任意大小),编号为 1~7,重量分别是 wi=[35,30,60,50,40,10,25],价值分别是 pi=[10,40,30,50,35,40,30],现在从这 7 个物品中选择一个或多个装入背包,要求在物品总重量不超过 C 的前提下,所装入的物品总价值最高。
这里需要明确的几个点:
1.每个物品都有重量和价值两个属性;
2.每个物品分被选中和不被选中两个状态(后面还有个问题,待讨论);
3.可选物品列表已知,背包总的承重量一定。
第三章、直接求解
import time
start=time.perf_counter()
C=150
V=[]
weight=[35,30,60,50,40,10,25]
value=[10,40,30,50,35,40,30]
for i in range(int(C/weight[0])+1):
for j in range(int(C/weight[1])+1):
for k in range(