使用负整数和正整数的子集和算法

时间:2016-04-20 02:02:46

标签: java algorithm subset-sum

checkNum是目标值。 array是我正在查看的整数数组。我正在使用矩阵来保存True和False值以查看我可能的总和。 checkPower方法仅检查索引i + 1是否= 2 ^ n。我在编写可以使用负整数解决子集和问题的算法时遇到问题。我写了一个算法,但我不能使用它,因为随着输入大小的增加,我的内存不足。我想知道是否有人想出一个算法来解决问题。我更喜欢它是用java编写的,还是伪代码。

    public static ArrayList<Integer> populateArray(boolean[][]matrix, int []array, int checkNum){

        int usedElement = 0;
        ArrayList<Integer>resultArray = new ArrayList<>();


        for(int i = 0; i < matrix.length; i++){

                if(checkPower(i+1)){
                    matrix[i][usedElement] = true;
                    usedElement++;
                    if(array[usedElement-1] == checkNum){
                        resultArray.add(array[usedElement-1]);
                        return resultArray;
                    }


                }
                else{
                    int tempSum = 0;
                    int remainingIndex = (int) (i - Math.pow(2, usedElement-1)); 
                    matrix[i][usedElement-1] = true;
                    tempSum += array[usedElement-1];

                    for(int k = 0 ; k < matrix[remainingIndex].length; k++){
                        if(matrix[remainingIndex][k]){
                            matrix[i][k] = true;
                            tempSum += array[k];
                        }   
                    }
                    if(tempSum == checkNum){
                        for(int j = 0 ; j < matrix[j].length; j++){
                            if(matrix[i][j]){
                                resultArray.add(array[j]);
                            }
                        }
                        return resultArray;
                    }
                }

        }
        return resultArray;

    }

0 个答案:

没有答案