【问题标题】:Optimizing Sets and Combinations优化集合和组合
【发布时间】:2012-11-05 06:53:09
【问题描述】:

我有一堆集合,A1、A2、A3,... AN。每个集合包含从 0 到 2000 的值的 N 个元素(可以说最多 1000 个)。 例如。

A1{1,2,3,4}
A2{2,4,3,5}
A3(1,2,5,6)

现在对于尺寸 k,例如3,A1 的组合将是 C1(1,2,3), C2(1,2,4), C3(2,3,4) 对于 A1 到 AN 我需要弄清楚 A1 中的所有组合是否也存在在 A2 到 AN 的组合中的某处。

即A1 的组合 C3 将匹配 A2 中的组合,也许还有 AN。现在我需要 A1 的 C1 和 C2 的结果以及 A2 到 AN 的结果。 简单而低效的方法是为所有集合 A1 到 AN 生成 k 大小的所有组合。然后对于 A 的 C1 哪里/如果它存在于 A2 到 AN。之后是 C2,然后是 C3。然后继续下一组并重复。

我该如何改进这种方法,因为一旦添加了新集合,它就需要频繁且昂贵的计算?

我发现的另一种解决方案将在 O(N^2 + N) 中运行而无需优化,这基本上涉及获取 A1 和 A2...AN 的交点,计算这些交点的组合,然后查看每个交点的次数这些组合中的大多数出现在生成的结果中。

【问题讨论】:

    标签: performance optimization set computer-science combinations


    【解决方案1】:

    您可以尝试散列您的组合。 您可以在这里使用两种方法,一种优化空间,另一种优化时间。 为了时间优化,您的散列函数将为每个组合创建一个唯一的键,每当您在一个已经被占用的地方被击中时,您就会知道您不是第一次遇到该组合。 对于空间优化,方法类似,但密钥不是唯一的。您必须管理与该键对应的组合列表,并在点击时遍历它以查看它是否包含您当前正在检查的组合。您的密钥的唯一性等级将定义您的表格的大小,因此您将不得不花费时间来验证命中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-26
      • 2018-02-27
      • 1970-01-01
      • 2011-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多