我正在研究一种实施Burstein瑞士配对系统(https://www.fide.com/fide/handbook.html?id=85&view=article)的软件。
在每轮比赛中,该系统形成得分组,其中包含具有相同比赛得分的球员(获胜和抽出比赛的得分)。在得分组内,所有玩家都按照特定标准排名。 Burstein系统的目标是将得分组中排名最高的球员与最低球员配对,第二最高球员与第二最低球员配对,依此类推。当一些配对的玩家已经互相玩耍时,必须选择不太理想的配对(如果可能的话)。
示例:在一个由6名排名球员组成的得分组中,以下15种配对是可能的(从最佳到最差情况,按降序排列):
1v6 2v5 3v4
1V6 2V4 3V5
1v6 2v3 4v5
1v5 2v6 3v4
1v5 2v4 3v6
1v5 2v3 4v6
1v4 2v6 3v5
1v4 2v5 3v6
1v4 2v3 5v6
1V3 2V6 4V5
1V3 2V5 4v6
1V3 2V4 5V6
1V2 3V6 4V5
1V2 3V5 4v6
1V2 3V4 5V6
我正在寻找的是一种为任意数量的玩家生成这种配对的算法。至少,了解这背后的数学概念会很好。我知道组合,排列和变化,但这些似乎都不适用于此(据我所知)。
如果您发布任何代码,将会欣赏和理解Java,C#或Pascal的使用。 ; - )