体育比赛如何设名次?
这个问题的本质其实就是比较和排序的问题,比较和排序问题在数学上属于组合数学的范畴,因此可以借用组合数学的一些思想来对此问题进行探讨。 首先引入一个定义:给定一个集合S和一个元素a,如果a隶属于S并且能够被S中其他的元素所替代(即存在b∈S使得ab),则称a是S的一个生成元。
其次给出答案:对任意非空集合S以及自然数n,可以把S的所有不同大小的子集按照包含的元素的个数进行排序并记录下来,这种记录方法的个数等于\frac{(|S|+n-1)!}{n!}个。这些记录方法中每个方法所对应的子集就是一个“满足条件的最大子集”。把所有满足条件的最大子集的对应元素求出来,并按顺序排列起来就得到了所求的最大子集,从而问题也就解决了。
下面详细介绍一下如何利用以上定义来解决本题的问题。
考虑所有可能的\left|\mathcal{R}\right|=2^{m+n}种排列\mathcal{R}。对于每一个排列\mathcal{R},把其中的元素依次写入A、B、C...中,则有\begin{align*}\mathbf{A}&=\{\text{第一项},\text{第二项}\}\\ \mathbf{B}&=\{\text{第三项},\text{第四项}\}. \end{align*}于是我们可以把原问题转化为了一个关于集合A、B…的问题——求所有可能的不同大小(也就是长度)的集合A、集合B……的排列,每一种这样的排列有一个相应的整数k,满足条件(\mid A\mid+\mid B\mid+...+\mid Z\mid )=k。这样我们就将原本的非线性规划问题转化为了一个线性规划问题。解线性规划问题就可以得到所有满足题意的最大子集及其对应的大小。
接下来我们来看如何解决线性规划问题。令x_{ij}表示变量集合A中第i项的元素为j的数的个数;y_{ijk}表示变量集合B中第i项的元素为j的函数的个数。则可以整理得到如下方程组: 因为变量的个数比已知数据要多,所以上述方程组有无限多个解。不过幸运的是,这些解可以分为若干组,每组解的数目等于\sum (\mid S_i\mid *\mid T_i\mid),其中S_i表示以元素a_i作为生成元的所有子集,T_i表示不存在元素a_i的子集。每个解都对应于一组(一个集合A,一个集合B,…),把这若干组的第一个元素组成一个新列,把第二个元素组成另一新列,如此等等,我们就可以把原方程组转化为三个等式:
然后我们利用计算机来解决这三个等式构成的方程组。先用计算机列出所有可能的S_i与T_i,接着代入到所给的等式中,最后解出的x_{ij}与y_{ijk}就是所求的最大子集A、B…所含的元素个数。