最近看到一道题目:
集合{1,2,...,n}的一些非空子集A1,A2,...,Am满足任意两个子集的交集的元素个数为偶数,问m最大值是多少?
刚看到这道题,感觉如果从组合的角度入手比较困难。当时感觉这种题目和线性代数的风格有点像,就是有好多子集,可以把它们看成一些向量。然后它们之间有一些约束,仔细揣摩,发现真的可以用线性代数做!
我们把每个子集表示成一个n维的行向量,如果i在这个集合中,那么该向量第i个数就为1,否则为0.把这m个行向量从上到下排成一个矩阵。把这个矩阵看成域F2上的矩阵. 由于每两个子集的交集元素个数为偶数,那么每两个不同的行向量之间作内积,结果就为0. 再由于子集均非空,说明这m个行向量之间是两两正交的,从而它们肯定是线性无关的。
那么行秩=m=列秩<=n.
显然{1},{2},...,{n}这n个子集符合要求。从而m的最大值为n.
类似的有一道题目:A={1,2,...,n}的n+1个非空子集A[1],...,A[n+1].证明:存在{1,2,...,n+1}的两个不交的非空子集S={i1,...,ik}和T={j1,...,jm}满足:上述子集中以S为下标的所有子集的并集等于以T为下标的所有子集的并集。
同样像上面,我们可以建立一个n+1行,n列的矩阵.这n+1个行向量(不妨设为a[1],...,a[n+1])肯定是线性相关的.从而我们可以找到n+1个不全为0的数x[1],...,x[n+1],(这里看成有理数域)
st: x[1]*a[1]+.....+x[n+1]*a[n+1]=0;
把上述项中x[i]中正的放左边,负的放右边变成正的系数,得到:
(...)*a[i1]+(...)*a[i2]+....+(...)*a[ik]=(...)*a[j1]+......+(...)*a[jm]. (*)
其中(...)表示一些正的系数.
下面说明上面的S={i1,...,ik}和T={j1,...,jm}就满足要求.
首先每一个向量至少有一维是1,所以不可能x[i]全为正或负,从而上面两个集合均非空,且显然它们交集非空.
对于每一个在 以S为下标的子集的并集 中的元素i,上述(*)式左边的第i维大于0,从而右边第i维也大于0,从而
i必定也在 以T为下标的子集的并集中,反之亦然,两个并集相等。