2017-08-06 41 views
0

我已经想了很长时间了,但无法弄清楚。我正在寻找一种算法(用任何语言)按照以下2条规则对一群人进行分组:通过两个因素对人进行分组的算法

  1. 按照数字表示的升序技能水平进行分组(技能越高)。在可能的情况下,团队中最好和最弱的人差不应超过1分。
  2. 尽可能传播来自同一国家的人,即不要将来自同一国家的人放在同一组中,同时不要违反上述规则1。一个小组不应该由来自一个国家的人组成,如果可能的话。

每组最多可以有4人(如果可能)或3人例如如果有18人,然后将它们分成3个组,每组4和2组的3

样本数据(随后国家技能等级):

  • 5 US
  • 5 US
  • 5美国
  • 5美国
  • 6 GB
  • 6 GB
  • 6 GB
  • 7 CN
  • 7 CN
  • 7 CN
  • 7 CN
  • 7 HK
  • 8 US
  • 8 US
  • 8 US
  • 8 CA
  • 8 CN
  • 8 CN
  • 如果你有任何想法

..to分为4S的2groups和3S

请帮助2groups? 谢谢你

回答

1

我会建议以下。

首先,汇总按国家和技能水平的数据,所以数据看起来更像:

US 5 4 
GB 6 3 
. . . 

排序这个由最高排名第一。

然后使用贪心算法。

  • 确定成员在该组的数量(尺寸或尺寸 - 1)
  • 取一个从所述第一组(最高等级)。
  • 继续从每个后续组中选取一个符合国情的组(因此您可能需要跳过美国)。

定义了第一组。

然后重复。

这并不保证是最优的。但是,再次,最优性没有为问题定义。哪一个更重要?国家多样性或技能相同?

+0

谢谢Gordon的建议。技能水平最多可以相差一个点,同时我们希望避免将来自1个国家的人组合成一个团体(因此您拥有不同的国家)。你如何确定排名? – smn

相关问题