堆叠容器时的大O

时间:2016-10-26 16:38:53

标签: c++ stl big-o

我使用std :: map,它实现为红黑树,时间复杂度为O(log(N)),用于访问(根据此站点:http://bigocheatsheet.com/)。如果我堆叠这些容器,如何计算大O.

例如map<int, map<int, int>>。访问最里面的地图的最大O是什么?

4 个答案:

答案 0 :(得分:3)

你只需要总结这种情况下的复杂性,

map<int, map<int, int>> data;
const auto& lookup = data[5]; // here you spend O(logn)
int value lookup2 = lookup[3]; // here you spend O(logn)

所以 O(logn) + O(logn) = O(klogn) = O( logn)时间

map<int, map<int, map<int, map<int, ..等情况下,这也是 O(logn),因为嵌套级别的数量并不依赖于N,但它们是永远不变。

答案 1 :(得分:3)

同样的事情。如果有map<int, map<int, int>> m并且您想要查找m[4][2] - 这只是两个独立的地图查找。所以你只需添加它们:O(log M + log N) = O(log MN)其中M是外部地图的大小,N是内部地图的大小。

请注意,外部和内部地图大小是独立的。

答案 2 :(得分:2)

仍为O(Log(N))

假设您的意思是在out map中访问第二个地图,它实际上是两个O(log(N))操作背靠背。因此O(2*log(N))再降低O(log(N))

答案 3 :(得分:2)

它是相同的,O(log(N))。

这是因为你有O(log(N))来获得内心的&#39; map,那么你需要O(log(N))再次为元素,所以你总共得到O(2 * log(N)),它与O(log(N))相同。