我正在尝试生成长度达50的字符串排列。这意味着50! (50个阶乘串=约3.041 * 10 ^ 64)。考虑到不可能使用单个虚拟机或进程,我有以下并行算法。我打算计算到许多虚拟机的计算:
说输入字符串是“abcdef” 1)具有从公共全局池中删除请求并对其进行处理的功能。请求对象由两个变量组成:ancestorSequence,remainingCollection 2)调用函数后,执行以下操作: 2a)如果remainingCollection有两个字符,则打印此列表: [ancestorSequence + remainingCollection [0] + remainingCollection [1],ancestorSequence + remainingCollection [1] + remainingCollection [0] 否则请执行以下操作 2b)创建以下请求并将其添加到公共全局池: 2b1)(ancestorSequence + remainingCollection [0],remainingCollection without remainingCollection [0]) 2b2)(ancestorSequence + remainingCollection [1],remainingCollection without remainingCollection [1]) 2b3)(ancestorSequence + remainingCollection [2],remainingCollection without remainingCollection [2]) 等等,直到 2bn)(ancestorSequence + remainingCollection [n-1],remainingCollection without remainingCollection [n-1]
我们总是可以通过让每个函数接受多个这样的请求来进行优化。请让我知道你对此的看法。