将N个元素划分为k个大小的子集

时间:2015-04-07 03:29:59

标签: algorithm math subset

如果我有N个不同的数字,则将它们划分为k个大小的子集,使得每个子集将具有至少一个共同的元素。请帮我解决这个问题。输出应该是这样的事情 如果我有1到5和k = 3的元素,那么输出应为:

- S0    =   {0, 1, 2}
- S1    =   {1, 3, 5}
- S2    =   {2, 4, 5}
- S3    =   {0, 3, 4}
- S4    =   {1, 4, 6}
- S5    =   {0, 5, 6}
- S6    =   {2, 3, 6}

2 个答案:

答案 0 :(得分:0)

1)请注意,如果k = 1|S| > 1那么这是不可能的(即k = 1S = {1,2}

2)否则只需取第一个数字,将其添加为每个子集中的第一个数字,用剩余数字填充子集。如果没有足够的数字填写最后一个子集,只需用随机数填写。

根据您的示例k = 3S = {0,1,2,3,4,5,6},我们可以这样做:

  • S0 = {0,1,2}(第一个数字+下一个2)
  • S1 = {0,3,4}1,2之后的第一个数字+接下来的2个)
  • S2 = {0,5,6}(在这种情况下,我们很幸运,因为我们能够填写S2,否则只应该0 .. 5我们可以添加一个随机数作为最后一个)

答案 1 :(得分:0)

您的示例是7分(0,...,6)和7“行”(例如,“行”{0,1,2})。请注意,任意两条线在一个点中“相交”,并且任意两个点确定一条线。 (从0,...,6中选择两个数字,你会发现这两个数字都只有一个。)

所以你提出的设计比你描述的更多限制。如果您只想让每个子集的至少一个共同的元素,您可以将0放入每个集合并获得 6 C < sub> 2 子集{0,1,2},{0,1,3},{0,1,4}等,这一点并不困难。

点和线的几何语言不是巧合。如果你想要一个设计,其中每对子集只有一个共同的元素,你可能需要一个投影平面。您提供的示例称为 Fano平面。对于N和k的所有组合,投影平面是不可能的。你必须有N = m ^ 2 + m + 1和k = m + 1,其中m被称为平面的 order 。通过使用模运算的m prime的“向量空间构造”容易构造投影平面(例如,m = 2给出Fano平面)。使用向量空间构造和有限域,使用素数m = p ^ k来构造它们稍微困难一些。细节可以在许多不同的参考文献中找到。

对于其他命令,知之甚少,除了通过强力计算已知没有6阶和10阶的投影平面。

这就是你想要的吗?如果没有,还有其他“组合块设计”可能具有您想要的属性,但您必须精确满足您的要求。

相关问题