分治法求解循环赛问题吧

 

一、问题分析

问题描述:有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):将各子问题的解合并为原问题的解 。

 

  • 三、问题求解中所遇到的问题及分析解决

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值