我指的是Scheduling algorithm for a round-robin tournament? .
我需要将一群人配对(或三人)成三人组,以便他们见面。例如,在 9 人的小组中,第一次 session 将是:[1, 2, 3]、[4, 5, 6]、[7, 8, 9]。接下来的 session 将类似于 [1, 4, 7]、[2, 5, 8]、[3, 6, 9]。当每个人都遇到其他人时事情就结束了,我们需要尽量减少“回合”的数量。
我已经无计可施地思考这个问题的解决方案了。非常感谢能够为我指明正确方向的人:)
最佳答案
如果“每个人都见过其他人”意味着所有配对都出现在时间表中,那么这是 Kirkman's schoolgirl problem 的概括,当组数为奇数时,可在最小轮数内求解(柯克曼三重系统的存在,归因于 Ray-Chaudhuri 和 Wilson)。社交高尔夫球手问题是对其他群体规模的概括,我预计偶数群体的情况将在该名称下进行研究。
在(看似不太可能)的事件中,“每个人都遇到了其他人”意味着所有可能的组都已被使用,那么您想要使用 Baranyai 定理中的构造来查找超图因子(请参阅 my previous answer on the topic 了解 Python 实现) )。
关于algorithm - 3 名参与者/三人组循环赛?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26125936/