我有关于knackpack问题的任务。但对于knackpack中的每个主题,我们有两组权重值参数。例如:
...等
我们只能为每个项目选择一组权重值参数。
那么,我看到了什么解决方案:
关于问题 - 如果我们有大约10-15项,这是正常的。但我们需要为1000项解决这个任务,所以它是2 1000 的独特组合。
生成独特的组合:
E=[[],[]]
weight1 = [1 2 3 4 5]
weight2 = [6 7 8 9 10]
for choices in itertools.product([0, 1], repeat=len(off)):
E[0].append([(on[j] if choice else off[j]) for j, choice in enumerate(choices)])
value1 = [10 20 30 40 50]
value2 = [60 70 80 90 100]
for choices in itertools.product([0, 1], repeat=len(off)):
E[1].append([(on[j] if choice else off[j]) for j, choice in enumerate(choices)])
如果我为30项目做了 - 我的VDS会下降。
请建议您解决此问题。
答案 0 :(得分:3)
你想用蛮力来解决NP完全问题,以及大量项目的问题。它理论上会起作用,但你需要永恒才能做到这一点。问题与python无关,而与理论计算机科学无关。
Wikipedia page for the knapsack problem包含有关如何解决问题的若干想法:您可以使用dynamic programming,甚至搜索approximations of the solution。
动态规划方法基于以下事实:问题具有最优子结构:有可能从n-1变量问题的最优解中为n变量问题构建最优解。