我在MATLAB中遇到了问题,我认为可以很好地解决这个问题。递归。我只是想知道是否有一个更优雅(可能是矢量化)的解决方案,它使用了一些内置函数。
所以这就是问题所在:
给定是一个(n×2)矩阵。找到所有可能的求和,其中总和中每行只有一个值。
示例1:
A = [a b;
c d]; % I use variable names/symbolic values to make it clearar
结果2:
result = [a+c; a+d; b+c; b+d];
示例2:
A = [a b;
c d;
e f];
result = [a+c+e; a+c+f; a+d+e; a+d+f; b+c+e; b+c+f; b+d+e; b+d+f];
我希望我的问题很清楚:) 感谢
答案 0 :(得分:2)
[m n] = size(A);
cols = dec2base(0:n^m-1,n)+1 - '0'; %// all combinations of cols
ind = bsxfun(@plus, 1:m, (cols-1)*m).'; %'// convert into linear index
result = sum(A(ind));
答案 1 :(得分:1)
是的,递归是一种好方法。
通过首先计算其前n-1行的和的集合,然后将左下或右下数字添加到每个数字中,可以找到n行矩阵的每个这样的总和集合。这一套。在伪代码中:
sumset(M):
If nrows(M) = 1 then return { M[1, 1], M[1, 2] }.
S = sumset(first nrows(M)-1 rows of M)
X = { }
For each number s in S:
Insert M[nrows(M), 1] + s into X.
Insert M[nrows(M), 2] + s into X.
Return X.
这将产生2 ^ n个数字。