映射与无序映射的时间复杂度分析 我以前认为,无序的映射比C++中的映射复杂得多。但今天当我在做一个问题(莫莉的化学制品)时,我超过了时间限制。经过大量的猜测工作(因为我认为我的解决方案是正确的),我尝试使用一个地图而不是一个无序的_地图,令人惊讶的是,我接受了它。在某些情况下,由于大量碰撞,无序的_地图可能有一个大的常数乘数,这将增加其实际复杂性,使其大于地图(欢迎更正)
我搜索了很多地图和无序地图的不同功能的时间复杂度,但没有找到合适的内容,因为我想知道什么时候应该使用地图或无序地图。有人能解释一下地图和无序地图在时间复杂度方面的区别吗。无序地图 < C++ > < < /p> > < <代码>无序的映射> <代码> > 在最坏的情况下,映射与无序映射的时间复杂度分析 我以前认为,无序的映射比C++中的映射复杂得多。但今天当我在做一个问题(莫莉的化学制品)时,我超过了时间限制。经过大量的猜测工作(因为我认为我的解决方案是正确的),我尝试使用一个地图而不是一个无序的_地图,令人惊讶的是,我接受了它。在某些情况下,由于大量碰撞,无序的_地图可能有一个大的常数乘数,这将增加其实际复杂性,使其大于地图(欢迎更正),c++,dictionary,maps,time-complexity,c++14,C++,Dictionary,Maps,Time Complexity,C++14,我搜索了很多地图和无序地图的不同功能的时间复杂度,但没有找到合适的内容,因为我想知道什么时候应该使用地图或无序地图。有人能解释一下地图和无序地图在时间复杂度方面的区别吗。无序地图 < C++ > < < /p> > < 无序的映射> > 在最坏的情况下,unordered_-map中每个操作符的时间复杂度是O(n)。如果所有元素都位于同一位置,则会发生这种情况 通过跟踪编译器的代码可以构造一个特殊的测试数据,就像Codeforces展示了如何在gcc上构造这样的测试数据一样 地图 > ISO
unordered_-map
中每个操作符的时间复杂度是O(n)
。如果所有元素都位于同一位置,则会发生这种情况
通过跟踪编译器的代码可以构造一个特殊的测试数据,就像Codeforces展示了如何在gcc上构造这样的测试数据一样
地图
<> > ISO/C++中的<代码>图>代码>,
map
的时间复杂度保证为O(logn)
unordered\u-map
< C++ > < < /p> > < <代码>无序的映射> <代码> >
在最坏的情况下,unordered_-map
中每个操作符的时间复杂度是O(n)
。如果所有元素都位于同一位置,则会发生这种情况
通过跟踪编译器的代码可以构造一个特殊的测试数据,就像Codeforces展示了如何在gcc上构造这样的测试数据一样
地图
<> > ISO/C++中的<代码>图>代码>,
map
的时间复杂度保证为O(logn)
map后面的数据结构是rb树,而无序的_-map使用哈希表作为其数据结构。所以我们可以通过分析rb树和哈希表来分析这两个容器
在映射中查找/插入元素:O(日志n)
在无序映射中查找/插入元素:O(1)映射后面的数据结构是rb树,而无序映射使用哈希表作为其数据结构。所以我们可以通过分析rb树和哈希表来分析这两个容器 在映射中查找/插入元素:O(日志n)
在无序映射中查找/插入元素:O(1)
有序映射
以排序方式保留键(顾名思义)。这些工具的时间复杂度取决于它们的使用位置(插入的频率、查找的频率等)。这是否回答了您的问题?谢谢你建议我“鬼”。但我想知道使用地图和未重新绘制地图在时间复杂度方面的区别。简单地说,请告诉我在地图中插入、搜索、查找的时间复杂性,我确实遇到了同样的问题,因为同一个存储桶中的元素太多。有序地图
以排序方式保留键(顾名思义)。这些工具的时间复杂度取决于它们的使用位置(插入的频率、查找的频率等)。这是否回答了您的问题?谢谢你建议我“鬼”。但我想知道使用地图和未重新绘制地图在时间复杂度方面的区别。简单地说,请告诉我在地图中插入、搜索、查找的时间复杂性。由于同一个桶中的元素太多,我确实遇到了同一个问题。
+------------------+-----------------------------------------------------+
| Expression | Complexity |
+------------------+-----------------------------------------------------+
| a_uniq.insert(t) | Average case O(1), worst case O(a_uniq.size()). |
| a.erase(k) | Average case O(a.count(k)), worst case O(a.size()). |
| b.find(k) | Average case O(1), worst case O(b.size()). |
+------------------+-----------------------------------------------------+
+------------------+--------------------------+
| Expression | Complexity |
+------------------+--------------------------+
| a_uniq.insert(t) | logarithmic |
| a.erase(k) | log(a.size())+a.count(k) |
| b.find(k) | logarithmic |
+------------------+--------------------------+