分治法求解循环赛

一、问题分析

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

  

    • 0
      点赞
    • 4
      收藏
      觉得还不错? 一键收藏
    • 0
      评论
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值