Что такое O (1) сложность пространства?

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

Если мы используем алгоритм в связанном списке, скажем 1->2->3->4, чтобы пересечь список, чтобы достичь "3", мы объявляем временный указатель. И пройти список до 3. Означает ли это, что у нас все еще есть O(1) дополнительное пространство? Или означает ли это что-то совершенно другое? Мне жаль, если это не имеет никакого смысла. Я немного запутался.

2 ответов


чтобы ответить на ваш вопрос, если у вас есть указатель и пересечь список, он считается O (1) сложность пространства. Если у вас есть 10 или 100 или даже 1000 указателей, сложность пространства равна O (1). Но, если вы хотите иметь " N "указателей, и даже если" N " равно 1, сложность пространства равна O(N).

надеюсь, вы понимаете, O (1) обозначает постоянное (10, 100 и 1000 являются постоянными) пространство и не меняется в зависимости от размера ввода (скажем, N).


предположим, я создаю некоторую структуру данных с фиксированным размером, и независимо от того, что я делаю со структурой данных, она всегда будет иметь одинаковый фиксированный размер. Поэтому операции, выполняемые над этой структурой данных, являются O (1).

пример, Допустим у меня есть массив фиксированного размера 100. Любая операция, которую я делаю, будь то чтение из массива или обновление элемента, эта операция будет O(1) в массиве. Размер массива (и, следовательно, объем используемой памяти) не является изменение.

другой пример, Предположим, у меня есть LinkedList, к которому я добавляю элементы. Каждый раз, когда я добавляю элемент в LinkedList, это операция O(N) в список, потому что я увеличиваю объем памяти, необходимый для хранения всех его элементов вместе.

надеюсь, что это помогает!