c++ - 比较两个无序集合的相等性有多昂贵?

标签 c++ set complexity-theory equality unordered-set

给定两个 std::set,可以简单地同时遍历两个集合并比较元素,从而导致线性复杂度。这不适用于 std::unordered_set,因为元素可以按任何顺序存储。那么 a == b 对于 std::unordered_set 有多贵?

最佳答案

最坏的情况是 O(n²)。

但无序集合实际上是按哈希排序的。 因此,可以比较哈希值(如果失败,则集合不能相等),然后验证相同的哈希值(线性)是否具有真正相同的值(对于具有相同哈希值的不同值,O(n²))。

在最好的情况下,这是 O(n)。

如果散列函数“好”(不同的对象 -> 总是不同的散列),通常复杂度趋向于 O(n),如果散列函数“坏”(所有东西总是具有相同的散列),则复杂度趋向于 O(n²)值)

关于c++ - 比较两个无序集合的相等性有多昂贵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10118551/

相关文章:

Python 与子字符串的交集

algorithm - 规定extra allowed space是O(1)是什么意思?

c++ - 将功能放入 API 或让开发人员自己制作的标准

javascript - 如果值已存在于 Javascript 集合中,如何删除该值

c++ - Qt LNK2019 基本 Qt5 应用程序错误

java - java中存储信息

algorithm - 找到 LZMA2 和 BWT 压缩算法的大 O 表示法?

algorithm - 查找/计算方法的复杂性

c++ - 使用一个简单的 assert() 宏

c++ - 在 C++ 中分配内存然后在 Cython 中释放它?