Javaに持ち込もうとしているPythonコードをいくつか見つけましたが、翻訳方法がわかりません:
for (prev_sum, subset) in old_subsets.iteritems():
最初にキー値を反復し、次にセットを取得するという 2 つのステートメントを実行しますか? 私の「翻訳」は元の意味をカバーしていますか?
// def subset_summing_to_zero (activities):
// subsets = {0: []}
// for (activity, cost) in activities.iteritems():
// old_subsets = subsets
// subsets = {}
// for (prev_sum, subset) in old_subsets.iteritems():
// subsets[prev_sum] = subset
// new_sum = prev_sum + cost
// new_subset = subset + [activity]
// if 0 == new_sum:
// new_subset.sort()
// return new_subset
// else:
// subsets[new_sum] = new_subset
// return []
public Set<Integer> subset_summing_to_zero (Set<Integer> startvalues){
Hashtable<Integer,Set<Integer>> subsets = new Hashtable<Integer,Set<Integer>>();
subsets.put(0,new TreeSet<Integer>());
for (Integer cost:startvalues){
Hashtable<Integer,Set<Integer>> old_subsets = new Hashtable<Integer,Set<Integer>>(subsets);
subsets.clear();
for (Integer prev_sum:old_subsets.keySet()){
Set<Integer> subset=subsets.get(prev_sum);
subsets.put(prev_sum, subset);
Integer new_sum = prev_sum+cost;
Set<Integer> new_subset=new TreeSet<Integer>(subset); // need two steps
new_subset.add(cost);
if (new_sum==0)
return new_subset;
else
subsets.put(new_sum,new_subset);
}
}
return null;
}