1

このPythonスクリプトに頭を巻くのに問題があります。Pythonの達人は、2、3行を翻訳したいと思いますか?私は主に最後の2つについて話している。この2行にはたくさん詰め込まれているようです。私の主な動機は、このアルゴリズムをJavaに変換することです。

u=matrix( [[1,2,2], [-2,-1,-2], [2,2,3]] )
a=matrix( [[1,2,2], [2,1,2], [2,2,3]] )
d=matrix( [[-1,-2,-2], [2,1,2], [2,2,3]] )
m=[ array([3,4,5]) ]
while m:
  for i in m:
    yield i
  g=( (i*j).getA1() for i in m for j in (u,a,d) )
  m=[ i for i in g if max is None or sum(i)<=max ]
4

2 に答える 2

2

JF Sebastian と Python に関する調査 (ただしほとんどは JF) のおかげで、これを Java に変換することができました。名前を変更したのは、罪のない人を保護するためだけでなく、より自己文書化するためでもあります。

イールド機能をキューに置き換えたことが、私を正しい軌道に乗せたきっかけでした。Java は "mat in (u, a, d)" を実行できないため、これを非常によく似た 3 つの行に分割する必要がありました。この投稿のためにいくつかのことを削除しましたが、完成したコードでは、「<= max」チェックを含むこれらの 3 行でメソッドを呼び出します。

思っていたよりも驚くほど速く動作します!

ArrayList<int[]> resultList = new ArrayList<int[]>();
ArrayList<int[]> workingList = new ArrayList<int[]>();
workingList.add(new int[]{3, 4, 5}); // add the base triple

while(workingList.size() > 0)
{
    for (int[] triple: workingList)
        addTriple(resultList, triple);

    ArrayList<int[]> additions = new ArrayList<int[]>();
    for (int[] triple: workingList)
    {
        additions.add(multiply(triple, u));
        additions.add(multiply(triple, a));
        additions.add(multiply(triple, d));
    }
    workingList = additions;
}
于 2012-09-05T20:26:11.840 に答える
2

これを Java に変換するのは簡単です。

while len(m) != 0:
      for arr in m:
          queue.put(arr) # yield arr
      newm = []
      for arr in m:
          for mat in (u,a,d):
              i = multiply_array_matrix(arr, mat).getA1()
              if max_ is None or sum(i) <= max_:
                 newm.append(i)
      m = newm
于 2012-08-31T22:48:58.593 に答える