嵌套地图的时间复杂度cpp

问题描述 投票:0回答:3

假设我们有map<int,map<int,int>>mm[x][y]的时间复杂度应该是多少?

我认为如果logn*logm的数目为xn的数目为y,则应该为m

c++ maps
3个回答
2
投票

如果x的数量为n,y的数量为m,我认为应该为logn * logm。

没有您可以在两个单独的地图上执行两个地图查找。您没有任何重复。一个地图在另一个地图内不会影响复杂性。

复杂度为O(log N + log M),其中N是一个图的大小,M是另一个图的大小-可以简化为O(log N),其中N是图的大小。较大的地图。


2
投票

假设我们有

std::map<int,std::map<int,int>> m{/*should be filled with something*/};
m[42][1337]; //We want complexity of this statement
const auto n1 = m.size(), n2 = m[42].size();

operator[]的复杂度在O(log(n))中,其中n是映射的大小。该语句在第一个映射上调用运算符,然后在第二个映射上调用运算符,因此我们的时间复杂度为O(log(n1)+ log(n2))。让我们将n定义为n1和n2的最大值,得到O(2 * log(n)),它也在O(log(n))>]

所以您在O(log(n))中变得很复杂。


1
投票

std::map s operator[]具有对数复杂度。目前尚不清楚为什么要增加个体复杂性。您在地图中查找一个元素,然后在另一张地图中查找另一元素。如果将其写为

© www.soinside.com 2019 - 2024. All rights reserved.