[英]All possible summation
我有两个矩阵:
A=[1 2 3];
B=[4 5 6];
它们求和的所有可能组合为
[1+4 1+5 1+6; 2+4 2+5 2+6;3+4 3+5 3+6]
现在,我的矩阵尺寸不是1 * 3,而是1 * n。 我有N个,而不是两个。
如何找到求和矩阵的所有可能组合?
遍历数组:
for ( every element a in A ) {
for ( every element b in B ) {
consider s = a + b
use s
}
}
如果预期结果是一个二维数组,其中包含每个总和的结果,则这是一个JavaScript实现 :
var A = [1,2,3,10];
var B = [4,5,6];
var M = new Array(A.length);
for ( var i = 0 ; i < A.length ; i++ ) {
M[i] = new Array(B.length);
for ( var j = 0 ; j < B.length ; j++ ) {
M[i][j] = A[i] + B[j];
}
}
for ( var i = 0 ; i < A.length ; i++ ) {
var line = '';
for ( var j = 0 ; j < B.length ; j++ ) {
line += M[i][j]+' ';
}
console.log(line);
}
结果:
5 6 7
6 7 8
7 8 9
14 15 16
如果我理解正确,并且您有M个数组,每个数组包含N个元素,并且想要找到所有可能的组合,则需要查看回溯方法。
您可以这样实现:
这对于具有两个元素的两个数组如何工作的说明是:
您可以像这样在Python中执行此操作
def printSol(As, I):
print I, '-->',
for p in range(len(As)):
print As[p][I[p]],
print
def main():
As = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
n = len(As[0])
I = [0] * n
pos = 0
printSol(As, I)
while True:
I[pos] += 1
while I[pos] % n == 0:
I[pos] = 0
pos += 1
if pos >= len(I):
return
I[pos] += 1
pos = 0
printSol(As, I)
if __name__ == '__main__':
main()
生成所有可能的27种组合:
[0, 0, 0] --> 1 4 7
[1, 0, 0] --> 2 4 7
[2, 0, 0] --> 3 4 7
[0, 1, 0] --> 1 5 7
[1, 1, 0] --> 2 5 7
[2, 1, 0] --> 3 5 7
[0, 2, 0] --> 1 6 7
[1, 2, 0] --> 2 6 7
[2, 2, 0] --> 3 6 7
[0, 0, 1] --> 1 4 8
[1, 0, 1] --> 2 4 8
[2, 0, 1] --> 3 4 8
[0, 1, 1] --> 1 5 8
[1, 1, 1] --> 2 5 8
[2, 1, 1] --> 3 5 8
[0, 2, 1] --> 1 6 8
[1, 2, 1] --> 2 6 8
[2, 2, 1] --> 3 6 8
[0, 0, 2] --> 1 4 9
[1, 0, 2] --> 2 4 9
[2, 0, 2] --> 3 4 9
[0, 1, 2] --> 1 5 9
[1, 1, 2] --> 2 5 9
[2, 1, 2] --> 3 5 9
[0, 2, 2] --> 1 6 9
[1, 2, 2] --> 2 6 9
[2, 2, 2] --> 3 6 9
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.