En mi campo (VFX, que cubre cosas como trazado de ruta, animación por computadora, simulación de partículas, dinámica de fluidos, procesamiento de imágenes, etc.), la complejidad algorítmica es fundamental. No hay forma de que algo que funcione en peor tiempo que el lineal lineal pueda esperar completarse en un tiempo razonable en entradas que comúnmente alcanzan millones de vértices, polígonos, vóxeles, partículas, texels, especialmente cuando muchas de estas cosas deben completarse muchas veces por segundo para proporcionar retroalimentación interactiva en tiempo real.
Dicho esto, no hay un fuerte énfasis en la complejidad algorítmica en la discusión, por lo general entre colegas, tal vez porque se da por sentado y es "rudimentario". Por lo general, se supone que si está escribiendo un trazado de ruta, va a operar en tiempo logarítmico o mejor, y que las estructuras de datos como las jerarquías de volumen límite son familiares y relativamente triviales de implementar para el lector. Incluso tuve un colega experto que seguía diciendo que los subprocesos múltiples y SIMD son más importantes que los algoritmos, y no creo que quisiera decir eso en el sentido de que se podría esperar sacar mucho provecho de la paralelización de un tipo de burbuja. Creo que dijo eso porque dio por sentado que aplicaríamos algoritmos sensibles,
A menudo, gran parte del enfoque en estos días es tomar muchos de estos algoritmos familiares y hacer que exploten mejor las características subyacentes del hardware, como el caché de la CPU, los registros e instrucciones SIMD, las GPU y los núcleos múltiples. Por ejemplo, a Intel se le ocurrió una forma novedosa de tomar el antiguo y conocido BVH e idear el concepto de "paquetes de rayos", básicamente probando múltiples rayos coherentes a la vez con un tipo recursivo de recorrido de árbol (que podría sonar así) Venía con su cuota de complejidad y gastos generales, excepto que está más que compensado por el hecho de que esos rayos ahora se pueden probar simultáneamente para las intersecciones de rayos / AABB y rayos / triángulos a través de las instrucciones y registros SIMD).
Algo similar con la subdivisión catmull-clark, que es algo muy rudimentario en los gráficos por computadora. Pero hoy en día lo que es competitivo, atractivo y súper eficiente son las implementaciones de GPU que se aproximan a la subdivisión CC utilizando parches Gregory, como popularizó Charles Loop y más tarde adoptó Pixar. La implementación más directa de la CPU ahora es bastante obsoleta, no necesariamente porque fue reemplazada en términos de complejidad algorítmica, sino porque fue reemplazada por algo que funciona bien con la GPU.
Y ese es generalmente un gran desafío en estos días: no encontrar el mejor algoritmo de una manera que sea relativamente independiente de las características subyacentes del hardware. De hecho, puse mi pie en la industria al crear una novedosa estructura de aceleración que aceleró significativamente la detección de colisiones para animar personajes y otros cuerpos blandos en los años 90 utilizando un enfoque de segmentación jerárquica en lugar de un índice espacial, lo que me dio una gran cantidad de ofertas de trabajo, pero en estos días ya no es tan impresionante ya que lo publiqué mucho antes de que tuviéramos cachés de CPU tan impresionantes y múltiples núcleos y GPU programables y qué no, y hoy en día uso un enfoque completamente diferente como resultado de los cambios significativos en el hardware subyacente