什么是分组计划,以便每两个人只聚在一起一次?

时间:2013-12-01 13:33:34

标签: algorithm data-structures

所以,我们有N个人。

每天,我们制作N / 2组,即一组中有2人。

我们每天都会进行分组,直到每两个人完全配对一次,不多也不少。

请每天给出分组计划。


以下是我的想法:

在N个人中,有N * (N-1) / 2个可能的对。由于我们每天都会有N/2对,因此我们需要N-1天。

所以基本上,如果我们的算法将N个人的列表作为输入,我们将输出N-1个列表,每个列表将包含一天的对。


但是如何将这些N * (N-1) / 2对组织到N-1天?

我知道如何以暴力的方式做到这一点,就像最坏的情况一样,我们每天尝试每对组合,或者更好地使用hashtset来查看一天的组合是否可行(一天的哈希值) )。

但我认为必须有更优雅和有效的方法来解决问题。图表?

1 个答案:

答案 0 :(得分:1)

看看http://en.wikipedia.org/wiki/Round-robin_tournament#Scheduling_algorithm - 这似乎回答了你的问题。我也在国际象棋比赛和债券结算的背景下看到过这个问题。