什么是一个好的数据结构,用于查找元素属于哪个集合,N个项目分为M个不同的集合?例如,如果集合是{A,B},{C,D,E},{F,G},我如何找到给定“D”的集合?这些集是散列集,因此集合中包含的查询是O(1)。
如果我在集合列表中只有集合,
[{A,B}, {C,D,E}, {F,G}]
我可以通过询问列表中的每个集合是否包含该项目来进行查找。这很容易实现,运行时间是线性的(以组数表示)。
更快的方法是将所有集合存储在哈希表中,键入每个集合中的每个项目。那就是:
[A -> {A, B},
B -> {A, B},
C -> {C, D, E},
D -> {C, D, E},
E -> {C, D, E},
F -> {F, G},
G -> {F, G}]
该结构让我在O(1)时间内检索正确的集合,但感觉效率低下且难看。是否有更好的数据结构允许O(1)查找正确的集合?我应该通过组合哈希像一种布隆过滤器来创建查找键吗?其他想法?
答案 0 :(得分:0)
您可以这样实现:
您需要一组树木。 index将是设定的数字。
有一个哈希表来存储整个列表中每个元素的(元素,索引)对。
对于每个集合,您可以使用树结构,唯一标识符是根,列表的元素连接到根。