我整数数组,其中每个数组排序有一些数字的列表。在这里,我想根据所有数组找到最常见的整数序列组合。例如,如果阵列的列表如下最常存在的组合
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)算法。
'{3,5}'' ?四个元素很常见,这意味着'{3,5}'实际上是最常见的组合。 – 2013-03-03 17:53:10
@groovy - 由于{3,5}是{3,5,7}的子集,与{3,5}具有相同的出现次数,{3,5}被提升为{3,5,7} – 2013-03-04 16:11:05
{3,5}与{3,5,7}不具有相同的出现次数。 {3,5}出现在A1,A2,A3,A5中。 {3,5,7}发生在A1,A3,A5 – 2013-03-04 18:13:18