我使用std :: map,它实现为红黑树,时间复杂度为O(log(N)),用于访问(根据此站点:http://bigocheatsheet.com/)。如果我堆叠这些容器,如何计算大O.
例如map<int, map<int, int>>
。访问最里面的地图的最大O是什么?
答案 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))相同。