如果存在,查找的最佳数据结构是什么?

What is the best data structure to lookup if something exists?

我想保留一份我在递归循环中已经遇到的事情的列表,这样我就可以避免一遍又一遍地重新计算相同的事情。最有效的数据结构是什么?

从复杂性分析来看,哈希表似乎是查找效率最高的。但是,当我感兴趣的只是查找指定的键是否存在时,保存键值对的数据结构感觉效率低下。

我认为集合可能是个好主意,但它的复杂性似乎并不如此。

集合可能是正确的抽象数据类型,因为它编码的唯一信息实际上是项目是否在里面。

虽然使用集合并没有指定特定的实现。在大多数情况下,您应该能够找到使用散列或某种类型的树结构实现的集合类型。您选择哪一个取决于您插入的数据是否可以有效地散列或排序。

在某些库中,您会发现使用库的映射类型实现的集合类型,但其中的值被忽略了。例如在 Rust 中,标准库的 HashSet 类型是使用 HashMap 类型实现的。