我有一个包含M
列表的ArraysList,这些列表已经过排序。 Arraylist中的每个列表都具有相同的大小N
。现在,我想将每个列表中的第一个(N-1)
对应值与其他值进行比较,我希望找到具有相同第一个(N-1)
值的列表。直观地说,它可以通过两个for循环来完成,但复杂性可能高达M*N*N
。我想知道是否有更好的算法来做到这一点。顺便说一句,M
可能是一个非常大的数字,而N
往往是一个较小的数字。
对不起,我可能不太清楚。我希望最终输出是具有相同的第一个(N-1)
值的列表对。
答案 0 :(得分:3)
使用良好的散列算法计算每行N-1
项的哈希码。按哈希代码组织行,并仅在哈希码匹配时进行完整比较。
答案 1 :(得分:0)
对列表列表进行排序。
对它们进行排序为O(N M LOG M)
(假设比较为O(N)
)。
如果你在基数排序方法中这样做,它实际上应该更多地在O(N * M)
或甚至O(M LOG M)
总共(假设列表不相同)。
然后在此列表中必须跟随具有相同前缀的列表。
假设您正在尝试重新实现APRIORI:是的,执行保留候选项集的排序列表。这正是Apriori-Gen为建立下一轮候选人所需要的。将它们组织成一个排序树非常整洁,因为在扫描数据库计算项目集时这也很快。