【发布时间】:2020-11-10 02:22:40
【问题描述】:
哈希表是非常常见的数据结构,用于解决竞争性编程/面试中出现的编码问题。
哈希表采用键值对,以便您可以查找键并获取值。但是,我经常发现自己需要 O(1) 查找键,而不是真正关心值。
例如:
如果我想知道之前是否使用过某些strings,我可能会将它们插入到带有key: string、value: bool 的哈希表中,其中布尔值始终为真。
做这样的事情有什么不好的地方?是否有其他不需要键值对的数据结构可以提供 O(1) 查找?
【问题讨论】:
-
哈希表有很多种,都有自己的性能特点。有你感兴趣的特定类型吗?例如,a
std::unordered_map基本上必须实现为链表数组,我相信您知道遍历列表的性能损失。 -
unordered_set是<type, bool>哈希表的泛化,具有 O(1) 查找/插入。使用它没有真正的缺点。与 C++ 中的任何集合类一样,YMMV 在实现和内存分配开销方面的性能。 -
@selbie 不知道这一点,你
-
所有哈希表实现在最坏情况下的性能都很差。很大程度上取决于散列值的分布程度。
-
您也可以尝试使用
O(logn)的其他数据集,对于较小的输入,c常量可能更小并提供更好的性能。试试看。