我几天来一直在努力解决以下(算法?)问题。我有一份我需要均匀分组的人员名单。每轮"轮#34;存储分组以便下一次(轮次)我尝试将人们组合在一起时,如果他们在上一轮中没有匹配,我们将它们分组。
示例:
第一轮
第1组
约翰
鲍勃
劳拉
第2组
露
迈克尔
标记
现在对于第二轮,我们必须避免将John Bob Laura组合在一起(或者至少将其最小化)。
我提出了适用于这些小边缘情况的解决方案,我用
创建配对矩阵[John - Bob] = 1(他们在前几轮中配对的次数)
[Bob - Laura] = 1
等...
然后我循环遍历该矩阵,对于每个人,我发现该人与其他人配对的次数最少,并将这两个添加到列表中。等等,直到每个人都被添加到该列表中。
然后我将该列表拆分为所需数量的组(组大小是唯一的参数)。
我发现,经过几轮或更大的"名单后,这并不起作用。
我越来越认为这可能是一个NP问题,因为我必须多次迭代才能找到完美的"列表"。
我应该研究一种算法吗?我在PHP中对此进行编码,但Java或伪代码也适用。
一个包含36人的名册。
第一轮,组人数= 6
第二轮,组数= 4
我不应该有人不止一次与其他人配对。
根据我的解决方案,我有大约10次配对发生了两次。