所以,我们有N个人。
每天,我们制作N / 2组,即一组中有2人。
我们每天都会进行分组,直到每两个人完全配对一次,不多也不少。
请每天给出分组计划。
以下是我的想法:
在N个人中,有N * (N-1) / 2
个可能的对。由于我们每天都会有N/2
对,因此我们需要N-1
天。
所以基本上,如果我们的算法将N个人的列表作为输入,我们将输出N-1
个列表,每个列表将包含一天的对。
但是如何将这些N * (N-1) / 2
对组织到N-1
天?
我知道如何以暴力的方式做到这一点,就像最坏的情况一样,我们每天尝试每对组合,或者更好地使用hashtset来查看一天的组合是否可行(一天的哈希值) )。
但我认为必须有更优雅和有效的方法来解决问题。图表?
答案 0 :(得分:1)
看看http://en.wikipedia.org/wiki/Round-robin_tournament#Scheduling_algorithm - 这似乎回答了你的问题。我也在国际象棋比赛和债券结算的背景下看到过这个问题。