考虑到powerset操作(生成给定集合的所有可能子集)及其庞大性(时间复杂度 O(n*2^n) ),我试图水平扩展它(分布式解决方案)。不知道这是否容易实现(因此提出了问题),但我会尝试分解问题并尽可能清楚地说明问题。
考虑以下使用 python 的示例:
import itertools
s = [1, 2, 3, 4, 5]
for l in range(1, len(s)+1): # this can be distributed
for subset in itertools.combinations(s, l):
print(subset)
根据子集长度分配工作负载是可能的(也很容易)。例如,如果我们有一个长度为 5 的集合,我们可以让每个工作人员计算长度为 N 的所有子集——在这种情况下,我们将有 5 个工作人员。为什么这对我没有吸引力很明显 - 工作负载分配根本不平衡。一组长度为 20 将生成 184756 个长度为 10 的子集,并且只有 20 个长度为 1 的子集(这意味着中间工作人员总是有更多的处理工作要做)。
问题
在这种情况下,有没有办法线性分配工作量,如何?重新表述问题 - 对于一组长度 L,我可以分配工作以使用 N 个平衡良好的工作人员计算 powerset 吗?