IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

趣题:选出最多的大小为奇数的子集,使得两两的交集大小都是偶数

Matrix67: My Blog 2011-11-16 23:42:01 累计浏览 1,471 次
本机暂存

     在集合 {1, 2, ..., n} 中选出尽可能多的子集,使得每个子集所含的元素个数都是奇数,但是任意两个子集的交集都含有偶数个元素。那么,我们最多能够选出多少个这样的子集来?

     容易看出,我们至少可以选出 n 个子集。例如,当 n = 4 时, {1} 、 {2} 、 {3} 、 {4} 就满足要求。我们还能选出更多的子集来吗?简单地尝试后,你会觉得似乎不行。不过,这却并不是显然的,因为存在一些不那么平凡的方案,也能让子集的数量达到 n ,例如 {1, 2, 3} 、 {1, 2, 4} 、 {1, 3, 4} 、 {2, 3, 4} 这 4 个子集也是满足要求的。看来,证明最多只能选出 n 个子集,好像并不那么容易。

         不过,借助线性代数,我们有一个几乎是秒杀的证明方法。假如说我们可以从集合 {1, 2, ..., n} 中选出 m 个满足要求的子集,并且用 m 个 n 维 01 向量 v1, v2, ..., vm 分别表示这 m 个子集。例如,当 n = 4 时,子集 {1, 2, 4} 就表示成向量 (1, 1, 0, 1) 。我们用 vT 来表示矩阵的转置。注意到, viT ・ vj 正好等于这两个向量所对应的子集的交集的元素个数。根据要求,这些向量必须满足,对于任意一个 i ,viT ・ vi 都是奇数,而对于任意两个不同的 i 和 j , viT ・ vj 都是偶数。下面,我们证明这 m 个向量在模 2 的有限域 F2 上是线性无关的,从而说明 m 一定小于等于 n 。

     只需要注意到,如果存在一组数 a1, a2, ..., an 使得

    a1 v1 + a2 v2 + ... + an vn = 0

     那么对于任意一个 i ,都有

    0 = (a1 v1 + a2 v2 + ... + ai vi + ... + an vn)T vi

             = a1 v1T vi + a2 v2T vi + ... + ai viT vi + ... + an vnT vi

             = ai

     因此,这 m 个向量是线性无关的。

     题目来源:http://mathoverflow.net/questions/33911/why-linear-algebra-is-funor

     一个非常类似的问题:选取最多的子集使得任两子集恰有一个公共元素

同分类推荐文章

  1. 对基本有序的序列排序算法 (2026-06-11 17:46:49)
  2. Four Levels Of Customer Understanding (2026-05-22 21:00:00)
  3. 除法的意义 (2026-04-12 20:52:17)

查看更多 算法 文章 →

建议继续学习

  1. 程序算法与人生选择 (累计阅读 9,184)
  2. 如果用户在5分钟内重复上线,就给他发警告,问如何设计? (累计阅读 6,029)
  3. 44个精彩的物理趣题 (累计阅读 4,485)
  4. Fibonacci数列性质的组合证明 (累计阅读 4,018)
  5. 生日悖论外传:任取两个人生日相同的概率是50% (累计阅读 3,587)
  6. 收割庄稼v.s.砍伐大树――如何解决问题 (累计阅读 3,320)
  7. 趣题:随机折断的木棒 (累计阅读 3,231)
  8. 趣题:证明所有乘积的总和与分拆的方式无关 (累计阅读 3,236)
  9. 打印质数的各种算法 (累计阅读 3,203)
  10. IMO2011趣题:总存在一条将会遍历所有点的直线 (累计阅读 3,180)