Algorithm 我有一个算法问题,需要尽可能公平地安排团队轮换

Algorithm 我有一个算法问题,需要尽可能公平地安排团队轮换,algorithm,scheduling,Algorithm,Scheduling,我有一个学校的项目,我必须想出一个算法来安排4个队在一个场地上打排球,这样每个队都能得到尽可能多的时间来打排球 如果你总是让赢家留下来,让输家轮换出去,那么排名第四的球队永远不会上场,排名第一的球队永远不会上场。 我们的目标是让每个人都玩同样的时间 最简单的答案是第一队和第二队比赛,然后第三队和第四队比赛,然后不断切换,但第一队永远无法和第三队或第四队比赛,以此类推 所以我试图找出一个算法,让每个人都能在某一点上和其他人比赛,而不会让一支球队比其他球队坐得多 建议?假装这是一个小型体育联盟,重复

我有一个学校的项目,我必须想出一个算法来安排4个队在一个场地上打排球,这样每个队都能得到尽可能多的时间来打排球

如果你总是让赢家留下来,让输家轮换出去,那么排名第四的球队永远不会上场,排名第一的球队永远不会上场。 我们的目标是让每个人都玩同样的时间

最简单的答案是第一队和第二队比赛,然后第三队和第四队比赛,然后不断切换,但第一队永远无法和第三队或第四队比赛,以此类推

所以我试图找出一个算法,让每个人都能在某一点上和其他人比赛,而不会让一支球队比其他球队坐得多


建议?

假装这是一个小型体育联盟,重复“赛季”。。。
(在欧洲的大多数体育联赛中,所有球队在一个赛季中都会与所有其他球队比赛几次)

假装这是一个小型体育联赛,然后重复“赛季”。。。
(在欧洲的大多数体育联赛中,所有球队在一个赛季中都会与所有其他球队比赛几次)

你应该打1-23-4,1-32-4,1-42-3,然后重新开始。

你应该打1-23-4,1-32-4,1-42-3,然后重新开始。

如果有N支球队,并且你希望所有的球队都打一次,然后是需要运行的“N选择2”=
N*(N-1)/2
游戏


要列举这些团队,只需将这些团队放在一个有序的列表中,让第一个团队与其他团队进行比赛,然后让第二个团队与列表中它下面的所有团队进行比赛,依此类推。如果您希望将比赛分散开来,以便各队在比赛之间有相似的休息时间间隔,请参见。

如果有N个队,并且您希望所有队对都玩一次,则需要运行“N choose 2”=
N*(N-1)/2
游戏


要列举这些团队,只需将这些团队放在一个有序的列表中,让第一个团队与其他团队进行比赛,然后让第二个团队与列表中它下面的所有团队进行比赛,依此类推。如果您想将比赛分散开来,以便各队在比赛之间有相似的休息时间间隔,请参见。

如何:制作一个大小为NC2的哈希表H,在本例中为6。它看起来像:

H[12] = 0
H[13] = 0
H[14] = 0
H[23] = 0
H[24] = 0
H[34] = 0
我假设生成密钥是很简单的

现在要安排一个游戏,扫描散列并选择值最低的键(一次)。由键表示的团队进行游戏,您将值增加1

编辑: 要添加任何团队都不应等待太久的另一个约束,请进行另一个哈希W:

W[1] = 0
W[2] = 0
W[3] = 0
W[4] = 0
每场比赛后,未参加比赛的球队的W值增加1


现在,如果有多个球队组合的比赛分数较低,那么在挑选比赛最少的球队时,请从该散列中获取帮助,以确定下一个必须参加比赛的球队。

如何:制作一个大小为NC2的散列表H,在本例中为6。它看起来像:

H[12] = 0
H[13] = 0
H[14] = 0
H[23] = 0
H[24] = 0
H[34] = 0
我假设生成密钥是很简单的

现在要安排一个游戏,扫描散列并选择值最低的键(一次)。由键表示的团队进行游戏,您将值增加1

编辑: 要添加任何团队都不应等待太久的另一个约束,请进行另一个哈希W:

W[1] = 0
W[2] = 0
W[3] = 0
W[4] = 0
每场比赛后,未参加比赛的球队的W值增加1


现在,如果有多个球队组合的比赛分数较低,那么在挑选比赛最少的球队时,请使用此哈希帮助确定下一个必须参加比赛的球队。

查看上的wikipedia条目。

查看上的wikipedia条目。

平衡循环算法的要求,有关团体锦标赛日程安排,请参见: 算法的要求可通过以下四个约束条件定义:

1) 全部对全部 每支球队必须与分区/联赛中的其他球队进行一次且仅一次的对决。 如果分区由n个队组成,锦标赛将在n-1轮举行

2) 主客场交替规则 如果可能的话,应该保留分区联赛中每支球队主客场交替的顺序。对于分区联赛中的任何一支球队,在连续的比赛序列中最多有一次哈哈,出现节奏的中断,即在连续的两轮中进行HH或AA比赛

3) 最后一个插槽编号的规则 插槽编号最高的团队必须始终位于网格的最后一行。对于每个后续迭代,网格的最大槽数交替在左右位置;左栏(主栏)和右栏(远离)。 用于编制联赛赛程的系统是“逆时针循环”。在锦标赛的一轮比赛中,由偶数个队组成的分区。如果分区中存在奇数个团队,则将在网格/环的最高槽位中插入一个BYE/虚拟团队

4) HH和AA非终端且非首字母
Cadence HH或AA不得出现在分区内任何球队的比赛开始或结束时。

平衡循环算法的要求,可在此处找到: 算法的要求可通过以下四个约束条件定义:

1) 全部对全部 每支球队必须与分区/联赛中的其他球队进行一次且仅一次的对决。 如果分区由n个队组成,锦标赛将在n-1轮举行

2) 主客场交替规则 如果可能的话,应该保留分区联赛中每支球队主客场交替的顺序。对于分区联赛中的任何一支球队,在连续的比赛序列中最多有一次哈哈,出现节奏的中断,即在连续的两轮中进行HH或AA比赛

3) 最后一个插槽编号的规则 sl最高的团队