我正在尝试编写一种方法来计算顺序很重要的幂集的所有排列。我相信这些被称为“安排”。我的意思是:
{a} -> {{a}, {}}
{a,b} -> {{a,b}, {b,a}, {a}, {b}, {}}
{a,b,c} -> {{a,b,c}, {a,c,b}, {b,a,c}, {b,c,a}, {c,a,b}, {c,b,a}, {a,b}, {a,c}, {b,a}, {b,c}, {c,a}, {c,b}, {a}, {b}, {c}, {}}
等等。我的印象是,给定一个集合 S,我应该生成 S 的幂集的每个子集的每个排列。所以首先生成幂集,然后将一个置换函数映射到每个集合上。
问题是这非常复杂——类似于 O(∑n!/k!) ,k=0..n。
我想知道是否有任何现有的算法可以非常有效地完成这类事情(也许是并行实现)。或者即使存在并行幂集算法并且存在并行置换算法,我也可以将两者结合起来。
想法?