首先,来解释一下,什么是单循环问题,其实,这是一个我们在实现中经常遇到的问题。
问题描述:
赛程问题:有N个运动员进行单循环赛,即两个运动员都要与其他所有运动员比赛一次。要求每个运动员每天只进行一次比赛,且整个赛程在N-1天内结束,运动员编号由1到N
注:N = 2^k
解题思想:
看到这个问题,我们的第一种想法当然就是用穷举法,找出一个可行的方案。其实这题并不适合用穷举法去解决,因为其时间复杂度太大。下面来说说,如何使用分治的思想来解决这个问题。
按分治策略,我们可以将所有的选手分为两半,则n个选手的比赛日程表可以通过n/2个选手的比赛日程表来决定。递归地用这种一分为二的策略对选手进行划分,直到只剩下两个选手时,就让这两个选手进行比赛就可以了。
日程表可用矩阵来标识,元素值为运动员编号,列坐标表示第几天,下标从0开始,并约定第0天,表示自己跟自己比赛,例如,对于只有两个动员员的情况
1