【发布时间】:2016-03-14 02:52:06
【问题描述】:
我正在尝试在 Matlab 中构建一个矩阵,其中行的总和是恒定的,但每个组合都被考虑在内。
例如,采用NxM matrix,其中M 是一个固定数字,N 将取决于K,这是所有行必须求和的结果。
例如,说K = 3 和M = 3,这将给出矩阵:
[1,1,1
2,1,0
2,0,1
1,2,0
1,0,2
0,2,1
0,1,2
3,0,0
0,3,0
0,0,3]
目前,我首先创建所有可能组合的矩阵,而不考虑总和(例如,这也包含 [2,2,1] 和 [3,3,3]),然后丢弃总和不等于K的元素@
然而,这是非常低效的内存(尤其是对于较大的K 和M),但我想不出一个很好的方法来构造这个矩阵而不先构造总矩阵。
这可能以一种不错的方式实现吗?还是我应该使用一大堆 for 循环?
【问题讨论】:
-
这是子集和问题的修改版本:en.wikipedia.org/wiki/Subset_sum_problem - 本质上,您试图确定给定整数子集的所有数字组合,这些组合给出一定的和。这是一个NP Complete 问题,对于
K和M的大值没有有效的方法,除非您遍历所有可能的组合。顺便说一句,如果您确实想出了一个有效的算法,请告诉我。我们可以share a million dollars together。