组合优化

时间:2015-12-29 05:58:37

标签: algorithm optimization set combinations computer-science

我正在创建一个应用程序,它可以生成共同满足用户提供的条件的项目组合。以下是该系统的一些细节;

  1. 有一组齿轮,分为3种类型。
  2. 每个装备都有两种从不相同的能力。
  3. 套件是由3种不同类型的齿轮组成的。
  4. 套件可能/可能没有重复的属性能力。
  5. 该应用程序允许用户提供k个能力(0

    目前我生成所有可能的套件并对齿轮进行分组;在将它放入集合之前检查该套件是否具有所有属性。你可以想象这种方法相当慢,除了使用数据库之外,我真的不知道如何通过数据结构或其他方式对其进行优化。

1 个答案:

答案 0 :(得分:0)

通过获取结果来反转您的问题,并查看如何构建它。

下面的算法有一个固定的时间来预先计算,然后是最短的时间来计算每个工具包,具体取决于每组中的项目数。

在每种类型中 - 比如A,B,C,让我们组合在一起,具有2个定义的能力的项目=>那么你在A中有15个不同的组(6x5 / 2),在B中有15个,在C中有15个。

然后你有3375种可能性。但只有15 x 6 = 80件商品。

算法:

  • 将具有相同能力的C的A,B的元素组合在一起并将它们放在一种地图中:element => GA1,......(见上文)

  • 2生成并分离15组A,15组B,15条C

如GA1,GA2,... GA15,GB1,GB2,... GB15,GC 1,GC2,GC15

  • 3生成兼容的GA / GB / GC列表,您将拥有80个列表

  • 4然后取80个列表中的每一个,并替换内部,A,B和C的元素

然后你就拥有了所有可能的工具包。