【发布时间】:2013-10-02 14:55:23
【问题描述】:
假设我有一个值数组:
a = np.array([1,5,4,2,4,3,1,2,4])
和三个“总和”值:
b = 10
c = 9
d = 7
有没有办法将a 中的值分组为一组值,其中值组合等于 b、c 和 d?例如:
b: [5,2,3]
c: [4,4,1]
d: [4,2,1]
b: [5,4,1]
c: [2,4,3]
d: [4,2,1]
b: [4,2,4]
c: [5,4]
d: [1,1,2,3]
请注意,b、c 和 d 的总和应保持不变 (==26)。也许这个操作已经有了名字?
【问题讨论】:
-
听起来您正在尝试解决“背包问题”(或其变体):en.wikipedia.org/wiki/Knapsack_problem
-
类似的,我称之为“多重背包问题”。例如。有多少种方法可以把你的东西装进三个背包(成本不是问题)。
-
所以这是一个搜索问题,而不是数字(numpy)问题。与大多数搜索问题一样,有一种蛮力解决方案和各种策略(通常是启发式的)来修剪死端分支。
标签: python arrays numpy set grouping