2

再帰プログラムを配布する方法がわかりません。現在は再帰的で単一のプログラムとして実行されますが、私の目標は、データのサブセットのみを生成する他のマシンにこのプログラムを配布することです。

プログラムの背景は次のとおりです。ターゲット(この場合は10)と最小/最大の重みを持つアイテムのリストを指定すると、それぞれの組み合わせが返されます。

だから3つのアイテムで、そして

Low = 2, 2, 2
high = 6, 6, 6
Target = 10

結果は次のとおりです。

2 2 4
2 3 3
2 4 2
3 2 3
3 3 2
4 2 2

作業を行う方法は次のとおりです。

void distribute (int i, int [] low, int [] high, final int rest, int [] sizes) {
    // System.out.println (i + " " + rest + " " + sizes);
    if (i == sizes.length - 1) {
        if (rest < high [i]) {
            sizes[i] = rest;
            result.add (Arrays.copyOf (sizes, sizes.length));
        }
    }
    else
        for (int c = 0;
             c <= java.lang.Math.min (high [i] - low [i], rest);
             ++c) {
            sizes [i] = c;
            distribute (i + 1, low, high, rest - c, sizes);
        }
}

誰かが出力を配布する方法について何か考えがあるかどうか疑問に思っているので、上記の例では、サーバーが3つある場合、各サーバーはすべてを生成するのではなく、2つの一意のエントリのみを生成します。たとえば、事前に6つの結果があり、各マシンに2つを配布したいのですが、どうすればよいでしょうか。それは可能ですか?もしそうなら、論理は何ですか?

それが役立つ場合は、プログラム全体がここにあります:http: //pastebin.com/RikqPgKh

4

1 に答える 1

2

複数のマシンでアルゴリズムを実行し、結果を統合したいと考えています。実行を分割するだけです。パラメータがすでに結果を制限しているため、これはそれほど難しいことではありません。

たとえば、L:[2,2,2] H:[6,6,6]実行する代わりに

L:[2,2,2] H:[3,6,6]
L:[4,2,2] H:[5,6,6]
L:[6,2,2] H:[6,6,6]
于 2012-11-01T20:24:59.317 に答える