用于从数组中查找项目的最大唯一组合的算法

时间:2016-12-02 22:46:33

标签: algorithm combinations subset

这是我使用的简化数据集,涵盖了我的基本跳闸点。 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

我的输出(为了简单起见,我的输出应该是:

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个项目将是高端但性能将是显而易见的。也许我过度复杂了,我需要专注于有效地消除子集而不是一次性完成所有这些工作?

1 个答案:

答案 0 :(得分:1)

按位置首先进行分区,然后按日期对每个位置进行排序。 给定N天的日期范围,浏览已排序的数据,将其映射到像

这样的元组数组

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

您应该能够通过维护两个索引在线性时间内完成此操作:'今天'以及' N天前'。

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