Сложность пространства для фрагмента кода "for (i = 1; i <= n; i ++) {int x = 10};" - PullRequest
0 голосов
/ 06 августа 2020

Относительно этого вопроса, для фрагмента кода

    for (i = 1; i <= n; i++)
       int x = 10;

Там в разделе комментариев написано, что сложность пространства будет O (1). По моему мнению, это должно быть O (n).

Мои рассуждения: Переменная «x» не должна уничтожаться после каждой итерации «for» l oop. Согласно правилам области видимости, переменная «x» не может быть доступна за пределами «for» l oop, поскольку она объявлена, определена и инициализирована в блоке «{}», но эта переменная «x» является локальной для функции. "main ()" (Предполагается, что это код C и он записан в main ()). Итак, время жизни переменной «x» будет там до тех пор, пока программа не будет завершена, потому что запись активации (кадр стека) функции main () будет удален в конце программы. Поскольку время жизни «x» остается до завершения программы, это означает, что пространство памяти для «x» также будет создаваться после каждой итерации «for» l oop и не должно использоваться повторно. Таким образом, в записи активации main () будет n копий переменной x. Пожалуйста, поправьте меня, если я ошибаюсь.

Ответы [ 2 ]

1 голос
/ 06 августа 2020

Я думаю, что вам не хватает, так это того, что области видимости не обязательно должны формироваться с помощью скобок. Показанный вами код в точности эквивалентен:

for (i = 1; i <= n; i++)
{
    int x = 10;
}

Отсутствие фигурных скобок не имеет значения. Тело for l oop по-прежнему формирует свою собственную область видимости, и внутри нее объявляется x.

1 голос
/ 06 августа 2020

Там в разделе комментариев написано, что сложность пространства будет O (1). По моему мнению, это должно быть O (n).

Для этого кода временная сложность O (n), пространственная сложность O (1) - вы не используете дополнительное пространство, в любом случае независимо от n.

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