我正在开发实现 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 1V5
2V6
3V4
1V5
2V4
3V4
3V6
1V5
2V3
4V6
1V6
1V4 2V6 3V5 1V4
2V4 2V4
2V5 3V6 1V4
我正在寻找的是一种算法,它可以为任意数量的玩家生成这种配对。至少,了解这背后的数学概念会很好。我知道组合、排列和变化,但这些似乎都不适用于这里(据我所知)。
如果您发布任何代码,Java、C# 或 Pascal 的使用将不胜感激和理解。;-)