总结行值的所有排列

时间:2014-06-04 09:01:29

标签: arrays algorithm matlab matrix

我在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];

我希望我的问题很清楚:) 感谢

2 个答案:

答案 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个数字。