赛程安排问题

来源:互联网 发布:php closure类 编辑:程序博客网 时间:2024/04/27 17:22

现在有2^n次方个选手参加比赛,已知两个选手比赛时总是强的一方获胜,且不会出现两个选手一样强的情况。每个选手每天只能同一个选手比赛。试给出一个赛程的安排表,使得在 n(n+1)/2  天内确定所有选手的强弱关系。

 

尝试用数学方法解决吧

1.n=1的时候两个人的比较需要1天,成立;

2.假设n的时候,最多需要 n(n+1)/2 天,现在我们来证明 2^(n+1)个人的时候需要 (n+1)(n+2)/2天。

首先我们把这 2^(n+1)个人分成两组,一组 2^n个人,记为A组跟B组。

由归纳可知 每组的强弱确定需要  n(n+1)/2 天确定,所以现在问题变为是否能在 (n+1)(n+2)/2 - n(n+1)/2 = n+1 天内确定A组跟B组的关系;

首先已经通过归纳法得到A,B组的两条强弱序列:

A :  A1,A2,A3 ...       Ak    -----》  A1最强,Ak最弱

B :  Bk,Bk-1,Bk-2...      B1    ------》 Bk最弱,B1最强

现在让两组的Ai与Bi比赛,需要一天时间。

假设序号p为第一个 Ai输给Bi的序号,即p之前都是Ai获胜、p之后都是Bi获胜,这一点由分别是递减和递增的顺序可以保证;

现在我们得到两个分组:一个强者组,包含A1~Ap和 Bp~B1,一个弱者组Ap~Ak和Bk~Bk,很明显两组的人数都是2^n;

而强者组的任意一个人都要比弱者组的任意一个人强,所以现在我们如果能在n天内确定强者组的两个序列的关系以及弱者组两个序列的关系,那么加上刚才的这一天,即可以在n+1天内确定A组跟B组的关系。

很明显这又是一个归纳法的证明,相信大家都会~就不再详述了~

原创粉丝点击