如果我有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}
答案 0 :(得分:0)
1)请注意,如果k = 1
和|S| > 1
那么这是不可能的(即k = 1
和S = {1,2}
)
2)否则只需取第一个数字,将其添加为每个子集中的第一个数字,用剩余数字填充子集。如果没有足够的数字填写最后一个子集,只需用随机数填写。
根据您的示例k = 3
和S = {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阶的投影平面。
这就是你想要的吗?如果没有,还有其他“组合块设计”可能具有您想要的属性,但您必须精确满足您的要求。