我有一个整数数组列表,其中每个数组都有一些排序的数字。在这里,我想根据所有数组找到最常见的整数序列组合。例如,如果数组列表如下
A1 - 1 2 3 5 7 8
A2 - 2 3 5 6 7
A3 - 3 5 7 9
A4 - 1 2 3 7 9
A5 - 3 5 7 10
这里
{3,5,7} - {A1,A3,A5}
{2,3} - {A1,A2,A4}
因此,我们可以将 {3,5,7} 或 {2,3} 作为最常见的组合。
现在我使用的算法如下
找到一个集合与所有其他集合的交集。并存储结果集。如果结果集已经存在,则增加结果集。例如:查找以下所有内容的交集
A1 intersection A2
A1 intersection A3
A1 intersection A4
A1 intersection A5
A2 intersection A3
A2 intersection A4
A2 intersection A5
A3 intersection A4
A3 intersection A5
A4 intersection A5
这里 A1 交点 A3 与 A3 交点 A5 相同,因此 set-{3,5,7} 出现可以设置为 2。类似地,可以确定每个结果集出现。
但是这个算法需要 O(n^2) 复杂度。假设每个集合都已排序,我很确定我们可以找到一个复杂度为 O(n) 的更好算法,但我无法写下来。任何人都可以为此建议一个 O(n) 算法。