我刚刚为此创建了一个算法,但它确实有其缺点。如果 P 是玩家人数,C 是每场比赛的参赛者人数,我的算法只是创建一个大小为 C 的数组,在其中保存当前比赛中每个玩家的索引。
我首先用尽可能低的索引填充数组,其中每个索引仍然大于前一个索引 ([1, 2, 3])。在每一轮中,我从数组的后面开始并尝试增加玩家索引。当我越界时,我向左移动一步,增加该玩家索引并将所有后续玩家设置为可能的最低值,同时仍保持每个索引大于前一个。
因此,对于每轮 5 名球员和 3 名参赛者,我得到
[1, 2, 3]
[1, 2, 4]
[1, 2, 5]
[1, 3, 4] <- could not increase 3rd position, increase 2nd position
[1, 3, 5]
[1, 4, 5] <- could not increase 3rd position, increase 2nd position
[2, 3, 4] <- could not increase 3rd or 2nd position, increase 1st position
[2, 3, 5]
[2, 4, 5] <- could not increase 3rd position, increase 2nd position
[3, 4, 5] <- could not increase 3rd or 2nd position, increase 1st position
---------
could not increase any position -> done
这个问题很明显。玩家在游戏中的分配不公平,而是许多玩家必须连续玩不必要的游戏次数(特别是,玩家 1 连续玩他/她的所有游戏,然后必须等待剩余的比赛)。
虽然这应该可以解决您当前定义的问题,但我也对提高公平性(减少每个玩家的连续游戏)的更好方法感兴趣。