一、问题分析
问题描述:有n个运动员进行单循环赛,即每个运动员要和所有其他运动员进行一次比赛。需要为n个运动员安排比赛日程。每个运动员每天只能进行一场比赛,且当运动员人数为偶数时,整个比赛在n-1天内结束,为奇数时,在n天内结束。运动员编号从1到n。
要求:设计算法对于任意N给出一个满足要求的循环赛安排表。
二、问题的解决方案/算法选择/设计思路
(一)问题解决方案:
设有n位选手参加循环赛,将n的取值分为三种情况:n=2^k,n为普通的偶数,n为奇数。
(1)每位选手要与其他n-1位选手比赛一场;
(2)每位选手每天比赛一场;
(3)当n为偶数时,比赛在n-1天内结束;为奇数时,在n天内结束。
按以上要求将比赛日程表设计成有n行和n-1列的一个表。在表中的第i行和第j列处填入第i个选手在第j天所遇到的选手,其中1≤i≤n,1≤j≤n-1。
(二)算法选择:
运用分治法,将原问题划分为较小问题,然后由较小问题的解得出原问题的解。
1.分治法:对于一个规模为n的问题,若该问题可以容易的解决(比如说规模n较小),则直接解决,否则将其分解为k个规模较小的子问题,这些子问题相互独立且与原问题形式相同,递归的解决这些子问题,然后将个子问题的解合并,得到原问题的解。
2.分治法的解题步骤(由三个步骤组成)
(1)划分(divide):将原问题分解为若干个规模较小、相互独立、与原问题形式相同的子问题。
(2)解决(conquer):若子问题规模较小,则直接求解;否则递归求解各子问题。
(3)合并(conbine):将各子问题的解合并为原问题的解 。
- 三、问题求解中所遇到的问题及分析解决