通过两个因素对人进行分组的算法

时间:2017-08-06 14:18:42

标签: algorithm

我已经考虑了很久但是无法弄明白。我正在寻找一种算法(用任何语言),通过以下这两条规则对一群人进行分组:

  1. 按技能等级分组,由数字表示(技能越高)。在可能的情况下,小组中最好和最弱的人不应该超过1分。
  2. 尽可能分散来自同一国家的人,即不要将同一国家的人放在同一个群体中,同时不要违反上述规则1。在可能的情况下,小组不应该由来自1个国家的人组成。
  3. 每组最多可以有4个人(如果可能)或3个人,例如如果有18个人,那么他们被分为3组,每组4个,每组3个。

    示例数据(技能级别跟国家/地区):

    • 5 US
    • 5 US
    • 5 US
    • 5 US
    • 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

    ..分为2组4s和2组3s

    如果您有任何想法,请帮忙吗? 提前谢谢你

1 个答案:

答案 0 :(得分:1)

我建议如下。

首先,按国家/地区和技能级别汇总数据,因此数据看起来更像:

US    5    4
GB    6    3
. . .

按照排名最高的排名对此进行排序。

然后使用贪心算法。

  • 确定组中的成员数(大小或大小 - 1)
  • 从第一组中取一个(排名最高)。
  • 继续从满足国家条件的每个后续小组中选择一个(因此您可能需要跳过美国)。

它定义了第一组。

然后重复。

这不能保证是最佳的。但话说回来,没有为问题定义最优性。哪个更重要?国家多样性或技能相同?