一尘不染

创建没有更多相交元素的组合

algorithm

我正在寻找一种特殊的组合形式,在这种组合中,没有两个集合具有多个相交元素。让我用一个例子来解释:

假设我们有9个字母集,其中包含A,B,C,D,E,F,G,H和I

如果创建三个字母的标准非重复组合,则将有9C3套。这些将包含ABC,ABD,BCD等集合。我正在寻找创建最多具有1个普通字母的集合。因此,在此示例中,我们将获得以下集合:

ABC,ADG,AEI,AFH,BEH,BFG,BDI,CFI,CDH,CEG,DEF和GHI-请注意,如果您选择两组,则重复的字母不得超过1个。

生成此类集合的好方法是什么?它应该是可扩展的解决方案,以便我可以处理一组1000个字母,子集大小为4的字母。

非常感谢您的帮助。

谢谢


阅读 222

收藏
2020-07-28

共1个答案

一尘不染

我不得不添加另一个答案,因为另一个答案已经太久了。

如果您有以下限制条件:

1)您每周需要4人一组。

2)某一周中的每个小组都是不相交的,每个学生恰好是一个小组。

3)如果两个学生在同一个小组中,则他们将来不必再在同一个小组中。

如果您按以下方式构造图G:

1)每个学生都是一个节点。

2)如果两个学生以前从未在一起在一起,他们会加入边缘。

随着学生随意下课/加入,这成为一个难题!即使您最初只是从一个完整的图开始,但几周后,该图仍可能变得不可预测。

您的问题:您需要找到G的一个扩展子图,以便它是K_4的副本的并集,或者换句话说,是K_4s的一个分区。

不幸的是,看起来这个问题是NP-Hard:4套精确覆盖(即NP-完全)可以解决您的问题(就像3套精确覆盖可以减少为三角形)。

也许这将有助于给出一些近似算法:http
:
//www.siam.org/proceedings/soda/2010/SODA10_122_chany.pdf

(您的问题可以简化为Hypergraph匹配,因此可以使用针对该问题的算法)。

确切的封面:http :
//en.wikipedia.org/wiki/Exact_cover

分成三角形:https
:
//noppa.tkk.fi/noppa/kurssi/t-79.5103/viikkoharjoitukset/T-79_5103_solutions_5.pdf

精确覆盖4组=给定大小为4m的集合S和S的4个元素子集的集合C,是否存在C的子集C’,使得S的每个元素在C’中恰好出现一次。

不幸的是,似乎您可能不得不更改一些约束。

2020-07-28