比赛日程安排算法,每个队员发挥特定的比赛数量
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了比赛日程安排算法,每个队员发挥特定的比赛数量相关的知识,希望对你有一定的参考价值。
我有一定数量的球队。我希望每支球队在4个特定时间与4个不同的对手进行4场比赛。
复杂的原因在于没有球队可以同时进行2场不同的比赛。例如,如果球队1正在这样打球 team1 vs team2,team1 vs team3,team1 vs team4,team1 vs team5 然后team2已经占据了第一个时间段,所以team2可以像这样玩 (team2 vs team1),team2 vs team3,team2 vs team4,team2 vs team5 但是问题出现了,team3将在team1和team2的第二个时间段中播放,但这是无法完成的。
我不知道这个算法可以调用什么,但我正在寻找算法来实现它。
我找了一个搜索循环和其他比赛,如匹配算法和婚姻问题,但我认为我的问题是不同的。如果我错了,请纠正我。
任何帮助是极大的赞赏。
我已经得出结论,如果球队的数量是奇数,那就没有解决方案了。设N是团队的数量。我们需要总共N*4/2
比赛,每队四场比赛,但每场比赛都计入两队。要在四个时段中进行N*2
比赛,我们必须平均每个时段的N/2
比赛。我们一次最多可以做floor(N/2)
比赛。如果N是奇数,floor(N/2) < N/2
。
一个只适用于N的解决方案(如果存在的话)是否有用?
该解决方案基本上告诉您如何填充6x6矩阵,矩阵中的每个条目都是行与列之间的匹配。
考虑算法中的一些规则
1.矩阵从左到右,从上到下递增值。 mat[0][0] = 1
2.每当i == j
,然后填充[n-1][j]
矩阵而不是[i][j]
。基本上,i==j
没有参赛作品
3.当矩阵中的条目达到6时,将其设为1
我们将遵循此规则并开始从[0][0]
列填充矩阵。意味着首先我们将填充第0列的每一行然后移动到第1列。
- 在[0][0]
,申请规则2.所以填写mat[n-1][0] = 0
- 在mat[1][0]
,填写下一个数字,即2,类似于[2][0], [3][0], [4][0]
- 现在第1列,从值2开始
- mat[1][0] = 2;
- 在mat[1][1]
应用规则2,填写当前列的最后一行,即mat[n-1][1] = 3
如果你希望每支球队只与其他球队一起比赛,请使用较低的三角形。
如果你希望每支球队都能与其他球队一起打2场比赛,那么主场和客场都会使用低三角和高三角。
希望你们理解我的解决方案。
干杯
一个简单的算法:
Round 1
1 2 3 4
8 7 6 5
然后旋转2-8位...
Round 2
1 8 2 3
7 6 5 4
Round 3
1 7 8 2
6 5 4 3
http://en.wikipedia.org/wiki/Round-robin_tournament#Scheduling_algorithm
(如果有一个奇数,可以通过添加一个虚拟配对来表示再见,但是随后Patricia Shanahan指出,并非每个球队都会进行每一轮比赛。因此,偶数球队和至少六支球队都是需要符合要求。)
以上是关于比赛日程安排算法,每个队员发挥特定的比赛数量的主要内容,如果未能解决你的问题,请参考以下文章