Algorithm 从数组中查找最大唯一项组合的算法

Algorithm 从数组中查找最大唯一项组合的算法,algorithm,combinations,subset,Algorithm,Combinations,Subset,这是我正在使用的一个简化数据集,它涵盖了我的基本跳闸点。 身份证、日期、地点 (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, 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个项目将是高端,但性能将是引人注目的。也许我把这件事搞得太复杂了,我需要集中精力高效地消除子集,而不是一次完成所有工作?

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

(计数(日期在其中的条目(this_date-N:this_date)),[索引]

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


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

寻求调试帮助的问题(“为什么此代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现此问题所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:似乎您只需要在当前算法中执行另一个步骤:循环通过每个项确定最大集,若该集不属于listOfSets的一部分,并且不是listOfSets中任何列表的子集,则将该集添加到listOfSets。然而,我不确定“唯一”的确切含义。您的示例似乎暗示2和3是唯一的,尽管它们的日期和位置相同。