0

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;

}
4

3 に答える 3

1

Javaに持ち込もうとしているPythonコードをいくつか見つけましたが、翻訳方法がわかりません:

for (prev_sum, subset) in old_subsets.iteritems():

これは辞書内のエントリに対するループです。インターフェイスはMap.Entry<K, V>、キーとそれに対応する値を、Python でペアが使用される方法でカプセル化します。

Set<Map.Entry<K, V>> entrySet()メソッドを使用すると、次のMap<K, V>ようにエントリを反復処理できます。

for (Map.Entry<Integer, Set<Integer>> e : oldSubsets.entrySet()) {
   Integer prevSum = e.getKey();
   Set<Integer> subset = e.getValue();
   ...
}
于 2013-09-18T22:43:38.597 に答える
0

Java の Tuple インターフェイスについては、こちらをご覧ください。

一般に、コードを翻訳する場合は、翻訳するコードを完全に理解し、アルゴリズムを理解してから、それを他の言語に実装する必要があります。結果のコードに同じクラスが含まれるか、似ているかは重要ではありません。重要なのは、最初のコードと同等である必要があるということです。つまり、同じ入力に対する結果は常に等しくなります。

于 2013-09-18T23:07:05.413 に答える