什么是查找元素属于哪个集合的良好数据结构,将 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) 查找正确的集合?我应该通过像一种布隆过滤器一样组合散列来制作查找键吗?其他想法?