Правильная сложность пространства равна O (n)
Тот факт, что он внешне напоминает двумерный массив, несущественен: величина второго измерения известна, и как таковая она остается O (n).Это также было бы верно, если бы пары представляли собой массивы из 100 элементов.Поскольку размеры элементов (каждый массив из 100 элементов) известны, пространственная сложность структуры равна O (100 * n), что равно O (n).
И наоборот, если элементы быливместо этого явно всегда совпадает с размером контейнера в целом, то есть это было что-то вроде этого:
int n = /*...*/;
std::vector<std::vector<int>> arr(n);
for(std::vector<int> & subarr : arr) {
subarr.resize(n);
}
Тогда это действительно было бы O (n 2 ) вместо этого.Поскольку теперь оба измерения зависят от неизвестной величины.
И наоборот, если второе измерение было неизвестно, но известно, что оно не связано с первым измерением, вы бы вместо этого выразили его как O (нм), то естьмассив построен следующим образом:
int n = /*...*/;
int m = /*...*/;
std::vector<std::vector<int>> arr(n);
for(std::vector<int> & subarr : arr) {
subarr.resize(m);
}
Теперь это может показаться противоречивым: "Но Xirema, вы только что сказали, что если бы мы знали размеры были n X 100 элементов, это было быбыть O (n), но если мы заменим 100 на m, разве у нас не будет сложности пространства O (нм) или O (100n)? "
Но, как я уже сказал: мы удаляем известныевеличины.O (2n) эквивалентно O (5n), потому что все, что нас волнует, это неизвестные.Как только неизвестное становится известным, мы больше не включаем его в оценку сложности космоса.
Пространственная сложность (и сложность времени выполнения и т. Д.) Предназначены для функционирования в качестве абстрактных представлений алгоритма или структуры данных.Мы используем эти концепции, чтобы выработать на высоком уровне концепцию, насколько хорошо они масштабируются для больших и больших входов.Две разные структуры данных, одна из которых требует 100 байтов на элемент, другая требует 4 байта на квадрат в квадрате, не будет иметь согласованных пространственных рангов между собой при масштабировании от небольшой среды к большой среде;в меньшей среде последняя структура данных будет занимать меньше памяти, а в большей среде первая структура данных будет занимать меньше памяти.Сложность порядка пространства / времени выполнения - это всего лишь сокращение для выражения этих отношений без необходимости увязать в деталях или семантике.Если вам важны детали или семантика, то вы не просто будете использовать Порядок структуры / алгоритма, а будете на самом деле тестировать и измерять эти разные подходы.