如果顺序无关紧要,如何从具有 k 个元素的集合列表中创建具有 k+1 个元素的集合列表?
How to create list of sets with k+1 elements from list of set with k elements if order does not matter?
我正在尝试实现 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] 中的情况。有没有人对这样的事情有任何建议或经验?
谢谢
将集合作为值存储在 Hashtable
中,键由列表组成,已排序,并用分隔符连接。这将导致 [x, y]
和 [y, x]
都存储在键 String.format('%d:%d', x, y)
下(假设 x <= y
)。这将使您能够捕捉到重复项。
这会慢。在包含许多项目的大数据上尝试。你会 运行 进入组合爆炸。
APRIORI 对它的数据进行排序,以及为什么它更复杂(但 方式 更有效)AprioriGen 方法以及哈希树都有很好的理由。
我正在尝试实现 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] 中的情况。有没有人对这样的事情有任何建议或经验?
谢谢
将集合作为值存储在 Hashtable
中,键由列表组成,已排序,并用分隔符连接。这将导致 [x, y]
和 [y, x]
都存储在键 String.format('%d:%d', x, y)
下(假设 x <= y
)。这将使您能够捕捉到重复项。
这会慢。在包含许多项目的大数据上尝试。你会 运行 进入组合爆炸。
APRIORI 对它的数据进行排序,以及为什么它更复杂(但 方式 更有效)AprioriGen 方法以及哈希树都有很好的理由。