循环赛算法分析

问题:

有N个运动员进行单循环赛,即每个运动员要和所有其他运动员进行一次比赛。
1.试用分治法为N个运动员安排比赛日程。
2.要求每个(或队)运动员每天只能进行一场比赛,且当运动员人数(队数)为偶数时,整个比赛在N-1天内结束,为奇数时,在N天内结束;
3.将运动员从1到N编号。
————————————————
思路:
我们用表格的方式来表示循环赛的日程安排,最左边的一列表示队号,每一行表示相应队比赛每天的对手,即a[i][j]表示第i队第j天的对手。
我们从两个队的比赛开始,并发现其中规律

 while i != 1 do
    if i % 2 == 0
        i  i/2
    else  i  i+1

对于任何大于2的数除以2再加1或者加1再除以2,它的规模都会缩小,所以这最终是可以终止的。接着我们看是否能分解为上面两种情况:
n为奇数时,用n+1代替计算,即转化为偶数的队数。
n为偶数时,分两种情况,(1)n/2为偶数,(2)n/2为奇数。(1)继续被2除,直到商为1,即转化为第一种情况,n是2的幂,或者商为大于1的奇数(2),转化为(2)。(2)就是第二种情况。所以,任意n是可以分解为上面两种情况的,而且是可以终止的。
把上述的内容一般化&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值