生成2 ^ 1000种组合

时间:2013-07-16 09:29:26

标签: python

我有关于knackpack问题的任务。但对于knackpack中的每个主题,我们有两组权重值参数。例如:

  1. 啤酒1kg 15 $,2kg 20 $
  2. 水5公斤30美元,10公斤40美元
  3. ...等

    我们只能为每个项目选择一组权重值参数。

    那么,我看到了什么解决方案:

    1. 从2个数组生成对weigth-value的所有唯一组合。在外面,我们有2个 n 组合。
    2. 对于所有组合,我们应用knackpack算法,然后选择具有最大值的解决方案 - 这是最佳解决方案。
    3. 关于问题 - 如果我们有大约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会下降。

      请建议您解决此问题。

1 个答案:

答案 0 :(得分:3)

你想用蛮力来解决NP完全问题,以及大量项目的问题。它理论上会起作用,但你需要永恒才能做到这一点。问题与python无关,而与理论计算机科学无关。

Wikipedia page for the knapsack problem包含有关如何解决问题的若干想法:您可以使用dynamic programming,甚至搜索approximations of the solution

动态规划方法基于以下事实:问题具有最优子结构:有可能从n-1变量问题的最优解中为n变量问题构建最优解。