是否可以分发递归算法?

时间:2012-11-01 20:00:47

标签: java algorithm

我不确定如何分发递归程序。现在它是递归的并且作为单个程序运行,但我的目标是将该程序分发给仅生成数据子集的其他机器。

这是该计划的背景。我给它一个目标(在这种情况下为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

1 个答案:

答案 0 :(得分: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]