Путаница в анализе космической сложности - PullRequest
0 голосов
/ 27 мая 2020

Я решал вопросы о сложности пространства, и когда мы говорим о сложности пространства, мы не учитываем пространство, используемое входными данными. Но здесь, в коде ниже, который я видел на веб-сайте, разве это не должно быть O ( 1), почему говорят, что это зависит от n ?? Пожалуйста, поясните, что я запутался

 int sum(int A[ ], int n)
{
   int sum = 0, i;
   for(i = 0; i < n; i++)
      sum = sum + A[i];
   return sum;
}

В приведенном выше фрагменте кода требуется 'n * 2' байта памяти для хранения переменной массива 'a []' 2 байта памяти для целочисленного параметра 'n' 4 байта памяти для локальных целочисленных переменных 'sum' и 'i' (2 байта каждая) 2 байта памяти для возвращаемого значения.

Это означает, что полностью требуется '2n + 8' байтов памяти для завершения его выполнения . Здесь общий объем требуемой памяти зависит от значения «n». По мере увеличения значения «n» требуемое пространство также пропорционально увеличивается. Этот тип космической сложности называется линейной пространственной сложностью.

1 Ответ

0 голосов
/ 27 мая 2020

Различные авторы и веб-сайты используют термин "космическая сложность" для разных вещей, поэтому вам необходимо проверить обозначение указанной c веб-страницы.

https://www.studytonight.com/data-structures/space-complexity-of-algorithms утверждает, что сложность пространства = вспомогательное пространство + пространство ввода (я предполагаю, что это связано с сайтом, который вы использовали).

https://theory.cs.princeton.edu/complexity/book.pdf определяет сложность пространства как исключение пространства ввода (и в этом пространство ввода case доступно только для чтения), что кажется более нормальным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...