查找具有k个大小的子集的n个元素的所有可能分区,其中两个元素仅共享相同的一次

时间:2010-06-18 13:59:48

标签: partitioning permutation combinatorics

我有n个元素需要分割成x个集合,每个集合必须保持k = 4个元素。

我需要找到所有可能的分区,其约束条件是每对元素只共享一次相同的集合。

因此,如果我从[1 2 3 4] [5 6 7 8] [...]开始,所有连续分区都无法保持,例如[1 2 X X]或[X X 1 3]。集合是无序的。

stirling numbers of the second kind接近这个问题。但是,它们只能解决任意大小的问题。

示例:我有32只老鼠,可放入8个笼子,每笼4只。小鼠应该在笼子之间旋转,使它们永远不会遇到另一只老鼠两次。你经常这样做以及配置是什么?

2 个答案:

答案 0 :(得分:2)

这是“社交高尔夫球手问题”的一个例子。 Warwick Harvey曾经有一个页面(http://www.cs.st-andrews.ac.uk/~wh/golf/),其中包含一系列针对不同问题规模的解决方案,但似乎已经失败了。在你的情况下,答案是10转,但我不知道实际配置是什么。不过,这是一个9轮的解决方案:http://www.cs.st-andrews.ac.uk/~ianm/CSPLib//prob/prob010/solution

对于一般的n和k,这是一个未解决的问题。

答案 1 :(得分:1)

您的问题陈述(“所有可能的分区”)令人困惑。

让我们修复条款(如果您同意):分区p)是 n个元素的特定(和完整)分布strong> x box ,每个 k = 4个元素。 (我使用术语'box'而不是'set'来避免混淆)(顺便说一句,请注意,如果我们接受这个定义,那么你必须重新说明关于“连续分区”的短语,这没有意义)。

然后,让我们调用P ={p1,p2 ...}所有可能分区的集合。现在,我们对P的一些子集感兴趣(我们可能将它们称为“适当的分区集”)。 PSOF是一组具有给定属性的分区:没有两个分区将同一对元素映射到同一个框。 (我们还可以添加最大属性:在不违反规则的情况下添加另一个分区是不可能的)。

现在,目前尚不清楚您是否愿意:

  • 计算多少个分区(最多)可以拥有其中一个PSOF (我不清楚,如果每个PSOF都有相同的基数 - 可能)
  • 查找其中一个PSOF的分区的算法。
  • 计算PSOF的数量。
  • 一种算法,用于查找所有可能的PSOF及其每个分区。

对我来说似乎不容易。 (对不起,我知道这不是一个as,而是一个澄清,但它不适合评论)