比赛日程安排算法,每个队员发挥特定的比赛数量

时间:2012-12-20 03:40:51

标签: algorithm match

我有一定数量的团队。我希望每支球队在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的第二个时段播放,但这是无法完成的。

我不知道这个算法可以调用什么,但我正在寻找算法来实现它。

我搜索了搜索循环和其他比赛,如匹配算法和婚姻问题,但我认为我的问题是不同的。如果我错了,请纠正我。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:3)

我已经得出结论,如果球队的数量是奇数,则没有解决方案。设N是团队的数量。我们需要总共N*4/2场比赛,每队有四场比赛,但每场比赛都计入两队。要在四个时段中进行N*2次匹配,我们必须对每个广告位进行N/2次匹配。我们一次最多可以进行floor(N/2)次匹配。如果N是奇数,floor(N/2) < N/2

仅适用于N的解决方案(如果存在)是否有用?

答案 1 :(得分:1)

此算法适用于任意数量的团队。
假设锦标赛中有6支队伍。
enter image description here

此解决方案基本上告诉您如何填充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场比赛,那么主场和客场都会使用低三角和高三角。

希望你们理解我的解决方案。
干杯

答案 2 :(得分:0)

一个简单的算法:

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

(如果有一个奇数,可以通过添加虚拟配对来表示再见,但是随后帕特里夏·沙纳汉指出,并非每个球队都会参加每一轮。所以偶数球队至少需要六个团队来满足要求。)