用于查找包含元素的集合的数据结构

时间:2013-05-01 18:04:39

标签: data-structures language-agnostic

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

1 个答案:

答案 0 :(得分:0)

您可以这样实现:

您需要一组树木。 index将是设定的数字。

有一个哈希表来存储整个列表中每个元素的(元素,索引)对。

对于每个集合,您可以使用树结构,唯一标识符是根,列表的元素连接到根。