Я пытаюсь понять, как форматирование кода и документация влияют на производительность программы.
Расстояние между операторами: наличие большего или меньшего количества пустых строк между операторами кода. Отступы: использование табуляции или пробелов для отступов и влияние уровня отступов (вложенных блоков).
Я решил проблему в leetcode с помощью Java, каждый раз, когда я отправляю заявку, внося некоторые изменения (как упоминалось в вопросе), время выполнения и использование памяти меняются.
Метрики, предоставляемые leetcode, не совсем являются хорошим показателем. Я попробовал отправить один и тот же фрагмент кода, и на самом деле он может давать разные результаты за один запуск. Вам нужно на самом деле профилировать и измерять это самостоятельно.
И, в более общем плане, они не влияют на сложность времени и пространства, поскольку представляют собой теоретические модели того, как будет работать программа, и не связаны напрямую со временем выполнения или занятостью памяти. Два алгоритма, которые имеют временную сложность O(n)
, могут иметь, скажем, 10-кратную разницу во времени, если n
достаточно велико.
На производительность это не влияет, влияет на читаемость. При компиляции Java один и тот же исходный код будет иметь один и тот же байт-код, независимо от используемого стиля кода. А статистика leetcode и других подобных сайтов вообще недостоверна.
Опуск всех необязательных пробелов может ускорить компиляцию (на незначительное количество). Фактическое время выполнения кода? Никакого эффекта. Он не имеет семантического значения и не присутствует в байт-коде.
Нет, когда комментарии «скомпилированы», пробелы в результат не включаются.
если код интерпретируется - понятия не имею, как работает leetcode - это может оказать незначительное влияние во время выполнения, но это точно не изменит ни время, ни сложность пространства (например, код не будет чаще зацикливаться или использовать больше места, в зависимости от N
( ) Может, попробовать, просто для проверки, повторно отправить тот же код?
Это влияет на производительность в том смысле, что влияет на то, насколько хорошо будет работать следующий программист, читающий ваш код. Что гораздо важнее, чем время выполнения и использование памяти.
Java — это компилируемый язык. При компиляции все пробелы, отступы и комментарии отбрасываются. В исполняемый формат преобразуется только код.
Проблема, с которой вы столкнулись, вероятно, заключается в том, что вы не контролируете среду выполнения и могут существовать конкурирующие процессы. А может быть, на сайте используется переводчик. Даже при наличии переводчика время на анализ этих частей, вероятно, невелико или не имеет значения. Конечно, это не влияет на сложность алгоритма.
Как уже упоминалось в комментариях, вам следует провести собственное тестирование в контролируемой среде, чтобы получить стабильные результаты.
Нет, в скомпилированных языках (например, Java) они не влияют на среду выполнения. Насколько большую разницу вы замечаете?