目录
详细需求
要求在一个物品集合中选择合适的物品放入背包,在放入背包中的物品总重量不超过背包容量的前提下,希望放入背包的物品总价值最大。根据是否允许部分物品放入背包的要求,背包问题可以分为分数背包问题和0-1背包问题。
对于分数背包问题,可以通过设计贪心算法得到问题实例的最优解。对于0-1背包问题,该问题已经被证明为NP-Hard,即不存在多项式时间算法那求解,但可以通过贪心算法得到问题的近似解,或者通过蛮力法、动态规划法得到问题的最优解。
详细代码
文件结构
fuction.py
import numpy
def input_s():
beibao_rongliang = int(input("输入背包容纳重量:"))
shu_liang = int(input("输入商品数量:"))
weights = []
values = []
for i in range(shu_liang):
weight = int(input("输入第" + str(i + 1) + "个商品重量:"))
value = int(input("输入第" + str(i + 1) + "个商品价值:"))
weights.append(weight)
values.append(value)
return values, weights, beibao_rongliang
def greedy_for_fs(values, weights, beibao_rongliang):
print("**************贪心算法分数****************")
print("--------------性价比排序----------------")
xing_jiabi = []
for i in range(len(weights)):
xing_jiabi.append(values[i] / weights[i])
xing_jiabi = numpy.array(xing_jiabi)
bigtoSmall = numpy.argsort(xing_jiabi)[::-1]
val