Объяснение
Ваше объяснение верно.Пространственная сложность линейная .
Однако ваш вывод (и вывод автора книг) неверен.Правильный ответ: оба ответы верны.То есть сложность пространства заключается в обоих:
Big-O дает верхнюю границу,не точная граница.Думайте об этом как <=
, а не просто =
.Так что если a in O(n)
, то также верно, что a in O(n^2)
(математически, Big-O дает набор функций).
Точная граница определяется как Theta (=
)и нижняя граница Омега (>=
), строгая нижняя граница задается small-omega (>
) и строгая верхняя граница small-о (<
).Таким образом, сложность пространства заключается в Theta(n)
.
См. Википедию для получения дополнительной информации и фактических математических определений.
Примечания
сложность пространства равна линейной , если предположить, что сборщик мусора Javas active .Его можно отключить или заменить имитационной реализацией, которая фактически не освобождает память (см. Epsilon-GC ).
В этом случае сложность пространства действительно будет квадратичный .
Самому алгоритму необходимо выделить квадратичный объем памяти.Тем не менее, он будет одновременно хранить только 1061 * линейный объем памяти.Анализ сложности пространства обычно проводится в отношении того, сколько памяти должно храниться одновременно.Но, возможно, автор хотел проанализировать алгоритм в отношении того, сколько всего должно быть выделено, что также могло бы объяснить его выбор.