Влияет ли расстояние между операторами, отступами и комментариями в коде на его временную и пространственную сложность?

Я пытаюсь понять, как форматирование кода и документация влияют на производительность программы.

Расстояние между операторами: наличие большего или меньшего количества пустых строк между операторами кода. Отступы: использование табуляции или пробелов для отступов и влияние уровня отступов (вложенных блоков).

Я решил проблему в leetcode с помощью Java, каждый раз, когда я отправляю заявку, внося некоторые изменения (как упоминалось в вопросе), время выполнения и использование памяти меняются.

Нет, в скомпилированных языках (например, Java) они не влияют на среду выполнения. Насколько большую разницу вы замечаете?

Federico klez Culloca 17.07.2024 10:46

Метрики, предоставляемые leetcode, не совсем являются хорошим показателем. Я попробовал отправить один и тот же фрагмент кода, и на самом деле он может давать разные результаты за один запуск. Вам нужно на самом деле профилировать и измерять это самостоятельно.

BIBOO unit 17.07.2024 10:48

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

Federico klez Culloca 17.07.2024 10:48

На производительность это не влияет, влияет на читаемость. При компиляции Java один и тот же исходный код будет иметь один и тот же байт-код, независимо от используемого стиля кода. А статистика leetcode и других подобных сайтов вообще недостоверна.

Chaosfire 17.07.2024 10:50

Опуск всех необязательных пробелов может ускорить компиляцию (на незначительное количество). Фактическое время выполнения кода? Никакого эффекта. Он не имеет семантического значения и не присутствует в байт-коде.

Elliott Frisch 17.07.2024 11:50

Нет, когда комментарии «скомпилированы», пробелы в результат не включаются.

John Williams 17.07.2024 12:26

если код интерпретируется - понятия не имею, как работает leetcode - это может оказать незначительное влияние во время выполнения, но это точно не изменит ни время, ни сложность пространства (например, код не будет чаще зацикливаться или использовать больше места, в зависимости от N( ) Может, попробовать, просто для проверки, повторно отправить тот же код?

user85421 17.07.2024 14:16

Это влияет на производительность в том смысле, что влияет на то, насколько хорошо будет работать следующий программист, читающий ваш код. Что гораздо важнее, чем время выполнения и использование памяти.

Anonymous 17.07.2024 14:33
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
4
8
72
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Java — это компилируемый язык. При компиляции все пробелы, отступы и комментарии отбрасываются. В исполняемый формат преобразуется только код.

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

Как уже упоминалось в комментариях, вам следует провести собственное тестирование в контролируемой среде, чтобы получить стабильные результаты.

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