【问题标题】:Combination optimization组合优化
【发布时间】:2015-12-29 05:58:36
【问题描述】:

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

  1. 有一个齿轮集合,分为 3 类。
  2. 每个装备都有两种不同的能力。
  3. 套件是一组 3 种不同类型的装备。
  4. 一个工具包可能有也可能没有重复的属性能力。

该应用程序允许用户提供 k 个能力 (0

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

【问题讨论】:

  • 您是否可以互换使用“能力”和“属性”这两个词?如果不是,什么是属性?
  • 是的,对不起,我说的属性是能力
  • 在没有完全指定能力的情况下,你想要(a)所有可能的工具包吗? (b) 一些可能的工具包? (c) 一种随机选择的可能套件?如果它是所有可能的套件并且 k 为 0,那么无论您使用什么算法,这将是一个很大的集合。还是我错过了什么?
  • 所有包含指定能力的套件,k 仅在 0 和 7 之间(1,2,3,4,5,6)

标签: algorithm optimization set combinations computer-science


【解决方案1】:

通过获取结果来反转你的问题,然后看看如何构造它。

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

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

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

算法:

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

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

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

  • 3 生成兼容的 GA / GB / GC 就像一个列表你将有 80 个列表

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

那么你就有了所有可能的工具包。

【讨论】:

  • 对不起,我不确定我是否遵循,计算中的数字 5 来自哪里?
  • 不是 5,而是 15:A、B 和 C 有子组 GA1 到 GA15,与 GBxx、GCxx 同上。 15 个子组 = 2 种功能的 15 种组合。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-24
  • 2014-07-28
  • 1970-01-01
  • 1970-01-01
  • 2014-06-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多