Java 仅用于循环的子集和算法

Java 仅用于循环的子集和算法,java,algorithm,subset-sum,Java,Algorithm,Subset Sum,是否有可能编写一个仅使用for循环的子集和算法?我假设运行时间为O2^n参考 实际上,您可以使用动态规划在x和时间复杂度上解决它。 但它也需要x和的空间复杂度来存储自下而上填充的布尔表。你可以用谷歌搜索解决方案 我认为您所说的“仅for循环”是指,不使用动态方法。然后我们有指数复杂性,就像你说的 public static ArrayList<ArrayList<Integer>> powerSet(List<Integer> intList) { A

是否有可能编写一个仅使用for循环的子集和算法?我假设运行时间为O2^n

参考

实际上,您可以使用动态规划在x和时间复杂度上解决它。 但它也需要x和的空间复杂度来存储自下而上填充的布尔表。你可以用谷歌搜索解决方案

我认为您所说的“仅for循环”是指,不使用动态方法。然后我们有指数复杂性,就像你说的

public static ArrayList<ArrayList<Integer>> powerSet(List<Integer> intList) {
    ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
    result.add(new ArrayList<Integer>());

    for (int i : intList) {
        ArrayList<ArrayList<Integer>> temp = new ArrayList<ArrayList<Integer>>();

        for (ArrayList<Integer> innerList : result) {
            innerList = new ArrayList<Integer>(innerList);
            innerList.add(i);
            temp.add(innerList);
        }
        result.addAll(temp);
    }

    return result;
}
public static List<Integer> subsetSum(int[] group){
    List<Integer> mySet = new ArrayList<>();
    for(int i=0;i<group.length;i++){
        mySet.add(group[i]);
    }
    ArrayList<ArrayList<Integer>> setArry=powerSet(mySet);
    for (int i=0;i<setArry.size();i++){
        ArrayList<Integer> oneSet= setArry.get(i);
        if(oneSet.size()>0){
        int sum =0;
        for (int t=0;t<oneSet.size();t++){
            sum+=oneSet.get(t);
        }
        if(sum==0){
            return oneSet;
        }
        }
    }
    return null;
}
public static void main(String[] args){
  List<Integer> res = subsetSum(group);
    if(res!=null){
      for (Integer i:res) {
        System.out.print(i+" ");
      }
    }else {
        System.out.println("false");
    }
}

powerSet credit

o2^n/2 link at如果您的意思是只针对循环,如中的无递归,那么是的,对于任何其他递归算法也是如此。虽然这不一定会改变算法所采取的高级步骤,但只会改变代码的外观。如果您的问题与java或任何其他语言无关,请不要标记它们。另外,请尽量更具体地回答您的问题。@Dukeling如果我们谈论的是具有明确上界的循环的经典,那么一般来说,这是不正确的。只有基元递归函数可以使用它们进行计算,例如Ackermann函数不能。但由于子集和问题最多有2^n个候选解,因此它是原始递归的。@biziclop我不是说for循环的特定子集。