【问题标题】:Algorithm for finding largest unique combination of items from an array从数组中查找最大唯一项组合的算法
【发布时间】:2016-12-02 22:46:33
【问题描述】:

这是我正在使用的一个简化数据集,涵盖了我的基本触发点。 ID、日期、位置

(1, Jan 1, LA), (2, Jan 2, LA), (3, Jan 2, LA), (4, Jan 2, NY), (5, Jan 3, LA), (6, Jan 5, LA)

我想找到最大的独特组合集,限制在日期范围内,并按位置分组。

所以有了上面的数据和输入

date_range = 3

我的输出(为简单起见是 id)应该是:

1,2,3,5
4,
5,6

因此 1,2,3 的组合不会被包括在内,因为它是 1,2,3,5 的子集

我的第一次尝试是找到所有可能的组合并在之后消除子集。我在这里找不到很好的解决方案。看起来效率真的很低。

第二次尝试是这样的:

Loop through each item
 Find largest combination

这似乎效果更好,但仍然会产生重复。例如,它将返回以下内容:

1,2,3,5
2,3,5
3,5
4
5,6
6

我没有需要处理的海量数据集,1000 个项目将是高端,但性能会很明显。也许我过于复杂了,我需要专注于有效地消除子集,而不是一次性完成所有操作?

【问题讨论】:

    标签: algorithm combinations subset


    【解决方案1】:

    首先按位置分区,然后按日期对每个位置进行排序。 给定 N 天的日期范围,遍历排序后的数据,将其映射到元组数组,如

    (count(entries where date in (this_date-N:this_date)), [indexes])

    您应该能够通过维护两个索引在线性时间内做到这一点:“今天”和“N 天前”。

    现在只需找到最大计数,然后删除前 N 天的所有条目。重复直到数组为空。

    【讨论】:

      猜你喜欢
      • 2011-12-11
      • 1970-01-01
      • 2012-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-07
      • 2017-10-28
      • 2018-07-14
      相关资源
      最近更新 更多