关于单循环赛排对阵图的算法

loveisbug 项目经理 2004-08-02 04:47:08
正在做这样一个工具,没有好的算法思路。
已知N个队参加比赛,单循环,一共N-1轮,如果N为奇数,每一轮有一队轮空。
如何排出每轮的对阵?
网上找过一个算法,但只适用N为2的n次方值。
请大家帮忙想想。
...全文
1192 点赞 收藏 7
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
ZhangYv 2004-08-09
先补成2^n的队伍,使用分治算法可以得出解。程序,我曾经写过贴在论坛的某个地方...
回复
loveisbug 2004-08-09
我看过一个分治算法,但是它只适用2的n次方个参赛队。
回复
gnefuil 2004-08-06
轮换法
回复
galois_godel 2004-08-05
其实也比较明显:
对于第i(0<i<n)队,他在第xn轮和第n队比赛,这里xn=2*i%(n-1)唯一决定,在第xj轮和第j队比赛,这里xj=(i+j)%(n-1)也是唯一决定,所以其在n-1轮和各队都比了一次,对于第n队,对任意i(0<i<n),在前n-1轮中都和他比了一次,他显然也和各队分别交手一次。
回复
loveisbug 2004-08-03
恩,我已经实现了。不过用的是循环嵌套,效率好象还需要优化。
如何证明其理论依据?
回复
galois_godel 2004-08-02
举个例子,有5个队伍
第1轮 1-5 2-4 3-x
第2轮 1-x 2-5 3-4
第3轮 1-2 3-5 4-x
第4轮 1-3 2-x 4-5
第5轮 1-4 2-3 5-x
x是虚设队,就是碰上表示轮空
回复
galois_godel 2004-08-02
如果,n是奇数的话,先设一只队伍n+1,每轮和这个虚设的队伍比赛的队伍就是轮

空,所以,我们下面假设n为偶数,
然后,设n个队伍编号分别是1,2,3,...,n,
在第k(1<=k<=n-1)轮,如果1<=i,j<=n-1, i<>j, (i+j-k)%(n-1)=0的,则第i队和

第j队比赛,第n队与由方程(2*x-k)%(n-1)=0决定的队伍x比赛。
可以证明,这样可以得到排法符合单循环规则。
回复
相关推荐
发帖
数据结构与算法
创建于2007-08-27

3.2w+

社区成员

数据结构与算法相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2004-08-02 04:47
社区公告
暂无公告