我有一组具有顺序关系的元素(可能很大):
[a,b,c,d,e,f]
和一组频繁模式(可能很大)的ID:
[a]:1,[b]:2,[c]:3,[a,b]:4,[b,c]:5,[a,b,c]:6
我有一系列有序集合:
[a,b], [e], [c], [e,f], [a,b,c]
我希望将序列中的每一个集合与相应模式的id匹配:
[a,b]:{1,2,4}, [e]:{}, [c]:{3}, [a,b,c]:{1,2,3,4,5,6}
我的目标是限制对序列的遍历次数,因此我想构建一个数据结构,在扫描期间可以使用它。 我考虑使用前缀树:
──null
├──a : 1
| |
| └──b : 4
| |
| └──c : { 5, 6 }
|
├──b : 2
| |
| └──c : 5
|
└──c : 3
我在序列中扫描一组并通过树进行多次递归传递(set、set.tail、set.tail.tail...),每次到达一个节点时,我将相应的id添加到一个数组中。
在我的推理中是否错过了任何特殊情况(刚意识到如果不想错过[a,c],则对于depth>2的节点必须放入多个id,例如存在[a,b,c])?有没有更复杂的数据结构可以用来提高处理时间?
编辑:事实上,在深度n处,我需要使用我的方法2^(n-2)
个id(考虑到我的树是密集的)。我不确定这是有效的方法...
编辑2:另一种方法是合并序列中每个单个元素的位图以建立每个模式(如SPADE算法中所用)。
a : [1,0,0,0,1]
b : [0,1,0,0,1]
ab : [0,0,0,0,1]
通过一些数组操作,我应该能够将其与我的初始数组元素匹配。