我正在尝试实现Apriori算法的一种变体,该算法涉及从大小为k的集合列表中形成大小为k + 1的集合列表。例如,如果我有列表[[1],[2],[3],[4]],我想形成列表[[1,2],[1,3],[1,4], [2,3],[2,4],[3,4]],然后是[[1,2,3],[1,2,4],[2,3,4]。我已经考虑过使用LinkedHashSet数据结构来修剪重复的元素,但是LinkedHashSets不会修剪要删除的结构[x,y] [y,x]中的情况。有人在这样的事情上有任何建议或经验吗?
谢谢
答案 0 :(得分:0)
将集合作为值存储在Hashtable
中,其关键字由列表组成,排序后再加上分隔符。这将导致[x, y]
和[y, x]
都存储在键String.format('%d:%d', x, y)
下(假设x <= y
)。这样您就可以捕获重复项。
答案 1 :(得分:0)
这将是慢。在包含许多项目的大数据上尝试一下。您将遇到组合爆炸。
有充分的理由解释为什么APRIORI会对数据进行排序,以及为什么它执行更复杂(但更有效)的AprioriGen方法以及哈希树。