В моей области (VFX, которая охватывает такие вещи, как трассировка пути, компьютерная анимация, моделирование частиц, динамика жидкости, обработка изображений и т. Д.), Алгоритмическая сложность является фундаментальной. Нет ничего, что могло бы работать в худшее, чем линейное время время, в любое разумное время на входах, которые обычно достигают миллионов вершин, многоугольников, вокселей, частиц, текселей, особенно когда многие из этих вещей должны завершаться много раз в секунду, чтобы обеспечить интерактивная обратная связь в режиме реального времени.
При этом, как правило, среди коллег нет особого акцента на алгоритмической сложности при обсуждении, возможно, потому, что это воспринимается как нечто само собой разумеющееся и довольно "зачаточное". Обычно предполагается, что если вы пишете трассировщик пути, он будет работать в логарифмическом времени или лучше, и что структуры данных, такие как иерархии ограничивающих томов, знакомы и относительно просты для реализации для читателя. У меня даже был опытный коллега, который все время говорил, что многопоточность и SIMD важнее алгоритмов, и я не думаю, что он имел в виду то, что можно ожидать многого от распараллеливания пузырьковой сортировки. Я думаю, что он сказал, что, поскольку он считал само собой разумеющимся, что мы будем применять разумные алгоритмы,
Зачастую в наши дни основное внимание уделяется принятию многих из этих знакомых алгоритмов и их совершенствованию для использования таких базовых характеристик оборудования, как кэш-память ЦП, регистры и инструкции SIMD, графические процессоры и несколько ядер. Например, Intel придумала новый способ использования знакомой старой BVH и предложила концепцию «пакетов лучей», в основном тестируя несколько когерентных лучей одновременно с рекурсивным видом обхода дерева (что может звучать так будет сопряжено со своей сложностью и накладными расходами, за исключением того, что он более чем компенсируется тем фактом, что эти лучи теперь можно тестировать одновременно для пересечений луча / AABB и луча / треугольника с помощью инструкций и регистров SIMD).
Подобная вещь с подобным подразделением Catmull-Clark, которое является очень элементарным материалом в компьютерной графике. Но в настоящее время конкурентными, горячими и суперэффективными являются реализации графических процессоров, которые приближают подразделение CC с помощью Gregory Patches, популяризированное Charles Loop, а затем принятое Pixar. Более простая реализация CPU теперь устарела не обязательно потому, что она была заменена с точки зрения алгоритмической сложности, а потому, что она была заменена чем-то, что хорошо сочетается с GPU.
И это, как правило, большая проблема в наши дни - не придумать лучший алгоритм, который относительно независим от основных характеристик оборудования. Я действительно вошел в индустрию, придумав новую структуру ускорения, которая значительно ускорила обнаружение столкновений для анимации персонажей и других мягких тел в 90-х годах с использованием подхода иерархической сегментации, в отличие от пространственного индекса, который принес мне много предложения о работе, но в наши дни это уже не так впечатляет, так как я опубликовал его задолго до того, как у нас были такие впечатляющие кэши ЦП, многоядерные и программируемые графические процессоры, а что нет, и в настоящее время я использую совершенно другой подход в результате значительных изменений в базовое оборудование.