我需要一点算法上的帮助来改善分析的性能。
问题:
给定了N个元素X [0],...,X [N-1]的集合:我需要所有可能的方式将N个元素分为M个不同的子集,每个子集具有N / M个元素(让我们假设N总是可以除以M)。
我指的是集合的数学定义。元素的顺序并不重要。例如{A,B}等于{B,A}。
示例:
N = 6
M = 2
Input := {X0, X1, X2, X3, X4, X5}
Output :=
{X0, X1}, {X2, X3}, {X4, X5}
{X2, X1}, {X0, X3}, {X4, X5}
{X3, X1}, {X2, X0}, {X4, X5}
{X4, X1}, {X2, X3}, {X0, X5}
{X5, X1}, {X2, X3}, {X4, X0}
...
这个问题的简单解决方案是遍历初始集合的所有排列,例如使用堆算法,然后分成相等大小的块。但是,这会产生比所需数量更多的组合,因为更改集合中元素的顺序不会对该集合造成任何影响,但是如果在朴素的Heaps算法实现中将集合表示为数组,则仍会构成不同的排列。
我想知道的是,是否存在针对此问题或类似问题的已知算法。或许,如果通过置换算法+过滤的方法尽其所能。
如果需要更多信息,请询问。
非常感谢您。