所有组合将集合划分为大小相等的子集的算法

时间:2018-08-27 13:16:57

标签: algorithm set subset permutation

我需要一点算法上的帮助来改善分析的性能。

问题:

给定了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算法实现中将集合表示为数组,则仍会构成不同的排列。

我想知道的是,是否存在针对此问题或类似问题的已知算法。或许,如果通过置换算法+过滤的方法尽其所能。

如果需要更多信息,请询问。

非常感谢您。

0 个答案:

没有答案