Какова пространственная сложность этой функции?

Я пытаюсь изучить концепцию пространственно-временной сложности. У меня есть простая функция, которая сравнивает два массива и проверяет, имеет ли второй из них квадратные значения, соответствующие первому. Я лучше понимаю временную сложность и считаю, что для этого примера это будет O(n). Однако для пространства я смущен, если бы это было O(1), поскольку мы всегда устанавливаем логическую переменную (работает) и i внутри цикла, или мы должны учитывать входные данные, которые могут быть разных размеров? Спасибо

let checkSquared = (arr, arr2) => {
    let works = true;
    works = arr.length === arr2.length

    for (let i = 0; i < arr.length; i++) {
        works = arr2[i] === (arr[i] * arr[i])
    }

    return works;
}

Вы перебираете массив, поэтому это O(n)

VLAZ 07.04.2019 18:13

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

haim770 07.04.2019 18:14

@VLAZ для времени, которое имеет смысл, но мы не создаем новые переменные в цикле, так почему пространство должно быть o (n)?

matt 07.04.2019 18:14

На отдельной заметке arr.length !== arr2.length && (works = false) либо напишите оператор if, либо сделайте works = arr.length !== arr2.length - нет необходимости делать одну строку условного выражения, не помещая туда условный код. То же самое с линией внутри петли for - просто сделайте ее works = arr2[i] !== (arr[i] * arr[i])

VLAZ 07.04.2019 18:15

@ haim770 хорошо, так что при расчете пространства вы смотрите только на использование памяти внутри функции и не обрабатываете входные данные как переменные?

matt 07.04.2019 18:15

Ах, извините, я думал, вы имели в виду сложность TIME. Да, сложность пространства O(1), вы не занимаете больше памяти линейным образом или что-то в этом роде. Это всегда одни и те же переменные, независимо от ввода.

VLAZ 07.04.2019 18:16

@VLAZ этот код внутри () после && является кодом условия. Это в основном тернар, но только с оператором if.

matt 07.04.2019 18:17

@matt, нас интересует пространство, используемое ваш код. Если он получает указатели на огромные структуры данных в качестве аргументов, это не ваш код выделяет это пространство.

haim770 07.04.2019 18:18

@matt Я знаю, что делает код. Это не нужно - вы без необходимости усложнили чтение. Просто сделайте сравнение, так как задание a == b && c = true такое же, как c = a == b. Последнее короче и понятнее, потому что мы знаем, что вы выполняете назначение с самого начала, нам не нужно читать конец строки, чтобы узнать это, а затем возвращаться к началу, чтобы выяснить когда.

VLAZ 07.04.2019 18:19

@VLAZ аааа, я понимаю, что вы говорите, да, было бы лучше просто сказать, что работает = arr2[i] === (arr[i] * arr[i]

matt 07.04.2019 18:20

@vlaz нет, works = (...) не получится

Jonas Wilms 07.04.2019 18:23
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
11
161
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ему передаются два массива по ссылке, так что это всего лишь две ссылки на уже существующие объекты. Внутри он создает логическое значение works, число i и, возможно, выделяет некоторое временное пространство для промежуточных значений.

В общем, О(1).

Хорошо, спасибо, теперь просто, например, если бы вместо этого внутри цикла мы переназначали работы как строку каждый раз, когда она менялась в зависимости от ввода ... это было бы o (n), потому что строка может быть разных размеров правильно?

matt 07.04.2019 18:22

Это зависит от того, что будет в этой строке. Обычно это будет O(m, n) (где m=arr.length и n=arr2.length).

mbojko 07.04.2019 18:26

Другие вопросы по теме