假设我们有map<int,map<int,int>>m
此m[x][y]
的时间复杂度应该是多少?
我认为如果logn*logm
的数目为x
而n
的数目为y
,则应该为m
。
如果x的数量为n,y的数量为m,我认为应该为logn * logm。
没有您可以在两个单独的地图上执行两个地图查找。您没有任何重复。一个地图在另一个地图内不会影响复杂性。
复杂度为O(log N + log M),其中N是一个图的大小,M是另一个图的大小-可以简化为O(log N),其中N是图的大小。较大的地图。
假设我们有
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))中变得很复杂。
std::map
s operator[]
具有对数复杂度。目前尚不清楚为什么要增加个体复杂性。您在地图中查找一个元素,然后在另一张地图中查找另一元素。如果将其写为