添加二维数组列表的组合



所以我正在解决的问题涉及整数数组列表的数组列表. 已知内容:每个整数数组列表中的元素个数。未知的是:实际有多少个整数数组列表。我需要一个算法的建议,将这些数组的(有序)元素在数组的每一个可能的组合求和。为了更清楚地说明我的意思,让我举一个例子:

AoA = [[1,0,1,0],[0,1,0,1],[1,1,1,1],[0,0,0,0]];

AoA[0] + AoA[1]元素之和;AoA [0] + AoA [2];AoA [0] + AoA [3];AoA [1] + AoA [2];AoA [1] + AoA [3];AoA [2] + AoA [3],

(4选2)

所以如果有人可以编码这个简单的版本,我会很感激,因为我正在努力做到这一点。如果有人能编写更复杂的例子,在AoA中有未知数量的数组(所以N选择2),你就是我的英雄。

TL;博士/编辑

我需要一个算法从数组的数组中取n- choice -2个数组;和数组(如[1,2,3]+ [1,2,3]= [2,4,6]);

添加新的求和数组到数组的数组中。

如果2是固定的,那么我能想到的最简单的事情就是生成具有N*(N-1)/2行的新数组,每个求和一个,然后使用两个变量遍历原始数组,例如:s

int c = 0;
for (int i = 0; i < N; i++) {
  for (int j = i + 1; j < N; j++) {
    for (int k = 0; k < M; k++) {
      sums[c][k] = AoA[i][k] + AoA[j][k];
    }
    c++;
  }
}

这是我得到的,花了我一段时间,但这将做我正在寻找的:它获取数组(t1, t2, t3, t4)的每个组合,并将它们的元素相加,然后返回您为n选择的任何组合(在本例中我将其保留为3)。

如果有更多的优化,你可以看到,请随时添加它。我是一个perl爱好者,所以在Java中使这个工作是一个真正的任务。

import java.util.ArrayList;

public class testnCk {
    public static void main(String[] args) {
        ArrayList<int[]> sums = new ArrayList<int[]>();
        int [] t1 = {1,1,0,0};
        int [] t2 = {1,0,0,1};
        int [] t3 = {0,0,0,0};
        int [] t4 = {0,0,1,1};
        ArrayList<int[]> testing = new ArrayList<int[]>();
        testing.add(t1);
        testing.add(t2);
        testing.add(t3);
        testing.add(t4);
        int n = 3;
        int i = -1;
        int[] array = new int[4];
        ArrayList<int[]> whatever = nCk(testing, sums, array, i, n);
        for (int[] test1 : whatever)
        {
            for (int j = 0; j < test1.length; j++) {
                System.out.print(test1[j]);
            }
            System.out.println();
        }
    }
    public static ArrayList<int[]> nCk (ArrayList<int[]> arrayOfDiffPatterns, ArrayList<int[]> solutions, int[] tempsums, int i, int n)
    {
        n--;
        for (int j=i+1; j<arrayOfDiffPatterns.size(); j++){
            int[] array = tempsums.clone();
            for (int k=0; k<arrayOfDiffPatterns.get(0).length; k++){
                    array[k] += arrayOfDiffPatterns.get(j)[k];
            }
            if(n>0){
                nCk(arrayOfDiffPatterns, solutions, array, j, n);
            }
            else{
                solutions.add(array);
            }
        }
        return solutions;
    }
}

相关内容

  • 没有找到相关文章

最新更新