这是我使用的简化数据集,涵盖了我的基本跳闸点。 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个项目将是高端但性能将是显而易见的。也许我过度复杂了,我需要专注于有效地消除子集而不是一次性完成所有这些工作?
答案 0 :(得分:1)
按位置首先进行分区,然后按日期对每个位置进行排序。 给定N天的日期范围,浏览已排序的数据,将其映射到像
这样的元组数组 (count(entries where date in (this_date-N:this_date)), [indexes])
您应该能够通过维护两个索引在线性时间内完成此操作:'今天'以及' N天前'。
现在只需查找最大计数,然后删除前N天的所有条目。重复直到数组为空。