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