观察
- 点“所有含 1 的子集”。F 有几个成员?再随便加一个不含 1 的子集,会怎样?
- 点“标出互补的一对”:每个子集旁边的小号码,和它的补集相同。为什么同号的两个子集不能同时在 F 里?
- 清空,换一种挑法:先挑 {1,2},{1,3},{2,3},再把所有三元子集和全集加进来。F 有几个?是否两两相交?
- 一共 16 个子集,分成了几对?
以集合为元素的集合,叫子集族。M 的全部子集组成的族叫 M 的 C 族,∣M∣=n 时它有 2n 个成员。竞赛里的子集族问题,常常是给族加一条规矩,问它最多能有多大。
先猜后证
{1,2,3,4,5} 的子集族 F 中任意两个成员都有公共元素。F 最多有几个成员?
先选定答案,才能看到结论。
✓ 猜对了!✗ 和你想的不一样——这正是值得停一下的地方。
所有含 1 的子集共 24=16 个,它们两两都含 1。能不能更多?32 个子集恰好配成 16 对“互补的一对”,每对至多选一个——所以 16 就是最大值。下面一步步看这个证明。
为什么:两两配对
相交子集族至多 2^(n−1) 个成员
第 1 / 4 步 -
先造一个 所有含 1 的子集两两相交,共 23=8 个。这说明最大值至少是 8。
∣F∣≥8
-
把子集配成对
-
同一对不能都要
-
上界
“构造 + 上界”是这类问题的标准两步:构造一个例子说明“能达到”,再用配对(或分抽屉)说明“不能更多”。配对其实就是抽屉原理:8 个抽屉,挑了 9 个子集,必有两个落在同一个抽屉里——互补,不相交。
另一条规矩:互不包含
换一条规矩:F 中没有一个成员包含另一个(这样的族叫反链)。同一层的子集元素个数相同,自然互不包含;最宽的是中间一层,有 C42=6 个。能不能跨层挑出更多?
斯潘纳定理:反链至多 C(n,[n/2]) 个成员
第 1 / 4 步 -
中间一层 6 个二元子集,两两互不包含。
∣F∣≥C42=6
-
跨层就有麻烦
-
把子集串成链
-
每条链至多一个
这里的“链”扮演了上一节“互补对”的角色:把全体对象分成若干组,每组里至多选一个。组数就是上界。
n=3 时自己试:最大的反链有几个成员?画出对称链,数一数有几条。
练一练
{1,2,…,6} 的子集族中,任意两个成员都有公共元素。这个族最多有多少个成员?
提示 · 方法构造:所有含 1 的子集。上界:把每个子集和它的补集配对。
提示 · 第一步64 个子集配成 32 对,每对两个子集不相交,至多选一个。
完整解答上界 32,而所有含 1 的子集恰有 25=32 个,所以最大值是 32。
从 {1,2,3,4,5} 的子集中挑出一族,使其中没有一个子集包含另一个。最多能挑几个?
提示 · 方法按斯潘纳定理,最大值是 C5[5/2]。
完整解答取全部 10 个二元子集即可,不能更多。答案是 10。
从 {1,2,3,4,5} 的子集中挑出一族,使其中任意两个子集的并都不是 {1,2,3,4,5}。最多能挑几个?
提示 · 方向“并不是全集”和“交不是空集”之间,有一座桥。
提示 · 方法取补集:A∪B=U⟺∁A∩∁B=∅(反演律)。
提示 · 第一步所以 F 合格当且仅当 {∁A∣A∈F} 是相交族,两族大小相同。
完整解答相交族至多 24=16 个成员,于是 F 至多 16 个;所有不含 1 的子集恰好 16 个且符合要求。答案是 16。
从 {1,2,…,10} 的子集中挑出一族,每个子集至多 3 个元素,而且没有一个包含另一个。最多能挑几个?
提示 · 方向构造:取全部三元子集。上界:还是用对称链。
提示 · 方法对称链分解中,每条链从第 j 层开始、到第 10−j 层结束,从第 j 层开始的链有 C10j−C10j−1 条。
提示 · 第一步元素个数 ≤3 的子集只出现在“从第 0,1,2,3 层开始”的链上,这样的链共有 C103 条(求和时逐项相消)。
完整解答每条链至多取一个,所以至多 C103=120 个;全部三元子集恰好 120 个且互不包含。答案是 120。