Это будет зависеть от контекста.
«Исправление квадратичной ошибки производительности во время выполнения» - это обычно то, что я вижу. Однако, заслуживает ли это исправления (изменение кода), зависит от контекста.
Имейте в виду, что базы данных предоставляют множество инструментов для улучшения сложности времени. Например, чтобы получить N лучших результатов из базы данных, просто скажите так. При преобразовании неэффективного клуджа во встроенный оптимизированный вызов объяснение кажется излишним.
Причина, по которой я рассматриваю алгоритм с квадратичным временем выполнения для того, чтобы заслужить проверку кода (обсуждение), не столько потому, что он медленный (медленный относительный; квадратичный быстрый по сравнению с экспоненциальным), а потому, что интуиция человека (например, ваших клиентов или коллеги-программисты) по своей природе неудобны из-за функциональности программного обеспечения, которая слишком сильно отличается от линейного времени выполнения из-за смешивания ожиданий от повседневной жизни.
Многие жалобы клиентов на производительность программного обеспечения попадают в эти две категории:
Вся система (программное и аппаратное обеспечение) была определена на основе предполагаемого использования. На прошлой неделе все работает нормально, определенная функциональность заняла менее 5 секунд. На этой неделе после установки обновления та же функциональность занимает более 1 минуты.
- Это сравнение с ранее оцененной производительностью. Клиент оценивает будущую производительность как абсолютный критерий шкалы времени человека (от секунд до минут).
Я отправил в систему 100 заданий. Почему на обработку уходит в 400 раз больше времени, чем на одну работу?
- Заказчик ожидает, что время обработки будет линейным. Фактически, клиент не может понять или принять, что существуют задачи, которые выполняются медленнее, чем линейные.
По этой причине клиент будет считать время выполнения ошибкой, если оба значения верны:
- Медленнее, чем линейный
- Заметно (т. Е. Попадает в диапазон времени человека (дольше, чем секунды или минуты) с учетом типичных размеров задач)
Допустимые аргументы, объясняющие, что квадратичный алгоритм времени выполнения не представляет проблемы (т.е. не заслуживает изменения кода):
- Размер задачи, обычно обрабатываемой этой квадратичной функцией времени выполнения, несколько ограничен
- Учитывая типичный диапазон размеров, фактическое (абсолютное) время выполнения все еще достаточно мало, чтобы его отклонить.
- Если пользователь на самом деле пытается отправить задачу, которая достаточно велика, чтобы быть заметной, пользователь получит сообщение с предупреждением о длительном времени выполнения
- Все пользователи системы - эксперты, поэтому они знают, что делают. Например, пользователи API должны были прочитать мелкий шрифт в документации API.
Многие алгоритмы, полезные для типичной разработки приложений, на самом деле работают медленнее, чем линейные (в основном O (N log N), как при сортировке), поэтому крупномасштабное программное обеспечение на самом деле попытается обойти это путем сортировки только соответствующей части данных, или использовать гистограмму (статистическую) технику фильтрации, которая достигает аналогичного эффекта.
Это относится к клиентам программного обеспечения, но если вы считаете, что пользователи библиотеки программного обеспечения или функции API также являются «клиентами», то ответ все равно будет применяться.