在java中只查找与特定值相加的子集
我有一个树状图,其中我有键和它的所有值以及一个目标值。基本上就是找到一个子集。但在这里,我需要求和到目标的值的键。我已经做了一个递归方法。这里我想结束递归,如果我得到任何一个子集。有什么最佳的方法来解决这个问题吗?注意:-值将更大,我将有数百个数据在java中只查找与特定值相加的子集,java,data-structures,treemap,Java,Data Structures,Treemap,我有一个树状图,其中我有键和它的所有值以及一个目标值。基本上就是找到一个子集。但在这里,我需要求和到目标的值的键。我已经做了一个递归方法。这里我想结束递归,如果我得到任何一个子集。有什么最佳的方法来解决这个问题吗?注意:-值将更大,我将有数百个数据 import java.util.*; public class SubsetFromATree { public static void main(String[] args) { TreeMap<Integer,In
import java.util.*;
public class SubsetFromATree {
public static void main(String[] args) {
TreeMap<Integer,Integer> tm = new TreeMap<Integer,Integer>() ;
tm.put(0, 3);
tm.put(1, 4);
tm.put(2, 5);
tm.put(3, 6);
// for(int i =0;i<20;i++) {
// tm.put(i, i+1);
// }
ArrayList<Integer> ans = new ArrayList<>();
ArrayList<Integer> out = new ArrayList<>();
StringBuffer s = new StringBuffer("0");
subset(tm,10,out,tm.size(),s,ans);
System.out.println(ans);
}
private static void subset(TreeMap<Integer, Integer> tm, int tsum, ArrayList<Integer> out, int size, StringBuffer val,
ArrayList<Integer> ans) {
// TODO Auto-generated method stub
if(tsum == 0) {
val.append("1");
for(int i = 0;i<out.size();i++) {
ans.add(out.get(i));
}
return;
}
if(size == 0 || val.equals("1")) {
return;
}
//Not including
subset(tm,tsum,out,size-1,val,ans);
ArrayList<Integer> output = new ArrayList<>(out);
output.add(tm.get(size-1));
subset(tm,tsum-tm.get(size-1),output,size-1,val,ans);
return;
}
}
import java.util.*;
公共类子流形树{
公共静态void main(字符串[]args){
TreeMap tm=新的TreeMap();
tm.put(0,3);
tm.put(1,4);
tm.put(2,5);
tm.put(3,6);
//为了(int i=0;没有有效的方法来解决这个问题;它是NP完全的,需要指数时间。有没有任何方法,如果我们达到目标和,从那里我们结束所有的递归?这当然是可行的,是的。例如,你可以返回一个布尔值,指示你是否找到了一个有效的解决方案,而不是hav正在调用void
函数。为此,我尝试使用StringBuffer,以便如果val变为1,它将结束递归,但这不起作用。val.equals(“1”)
将永远不会为真,因为StringBuffer
不等于String
。