Array passed by reference
означает, что вы сортируете на месте, без дополнительно пространство необходимо для выходных данных.
Поэтому пространство сложности (то, что вам нужно сверх исходных данных устанавливается (а)) является константой O(1)
, а не линейный O(n)
.
С точки зрения конечного фрагмента кода, который слишком является O(1)
просто потому, что массивы деградируют до первоклассников элементов указателей при передаче функции. Автор, похоже, понимает концепцию с их комментарием в нижней части страницы:
Но будьте осторожны. Если вещи передаются указателем или ссылкой, то пространство является общим. Если A передает массив C-стиля в B, то не будет выделено новое пространство.
Но, по какой-то причине, они, похоже, считают, что передача массива будет сделать копию (б).
(а) Если пространство сложности должны были включать в исходный набор данных, то O(1)
сложность будет невозможно.
(б) И, так как самый лучший человек в состоянии говорить от имени автора является самим автором, я протянул руку с вопросом, а ответ объясняет различие между этими двумя случаями.I надежда он не возражает, поскольку, будучи педагогом, я предполагаю, что он имеет такое же отношение «увеличение-общий-знание-в-мире», как я, и это демонстрирует уровень уважения к такому отношению, которое Я нашел освежающий:
Дополнительное пространство обычно называют вспомогательной космической сложности. Без квалификатора сложность пространства включает требования к пространству ввода.
На моей странице, по крайней мере, указывается это различие. Лучшая страница показала бы простые практические примеры того, как алгоритмы торгуют временем, пространством и простотой алгоритма, но поскольку я не преподавал курс данных в течение многих лет, я не вернулся, чтобы поддерживать любую из этих страниц , И я никогда не претендую на роль эксперта в теории сложности. Естественное понимание языка, основанные на случаях рассуждения и гибкая разработка программного обеспечения - мои сильные стороны.
Я полагаю, что он поддерживает утверждение в верхней части страницы об отсутствии простых писем по сложности пространства, что эта ничтожная страница столь же высока, как и у Google.
Спасибо, что обратились ко мне, и я надеюсь, что это поможет.
Таким образом, это, по-видимому, отличается терминологией, а не прямой ошибкой с чьей-либо стороны. Я не совсем Определяет Я вижу полезность непрозрачной пространственной сложности (включая размер исходного набора данных), так как это практически не зависит от выбранного алгоритма.
Кроме того, я всегда считал сложность как свойство алгоритма , и поскольку выбранный алгоритм не имеет контроля над размером исходного набора данных, я склонен не включать его.
Однако, я буду немного более конкретными в будущем, обеспечивая Заявляю, что я имею в виду космической сложности в случае, если читатели не уверены :-)
В любом случае, что по крайней мере проясняет, почему ваш примечания к курсу и замечания Северо-Западного отличаются в своих утверждениях. Независимо от того, какое определение сложности пространства вы выберете, один из них должен быть скорректирован с учетом этого.
Речь идет о том, следует ли считать аргумент массива чтения/записи, что, по-видимому, является вопросом мнения (я бы подумал, что консенсус в том, что он этого не делает). –
Поскольку вы сортируете на месте, вы не используете _additional_ память для массива, то есть сложность пространства алгоритма равна O (1). При измерении сложности пространства обычно игнорируется размер ввода, потому что вход присутствует независимо от алгоритма. –
@DavidEisenstat Что вы подразумеваете под массивом чтения/записи? – committedandroider