Nel mio campo (VFX, che copre cose come tracciato di percorsi, animazione al computer, simulazione di particelle, fluidodinamica, elaborazione di immagini, ecc.), La complessità algoritmica è fondamentale. Non c'è modo che nulla operi in peggio del tempo linearitmico possa sperare di completare in un tempo ragionevole su input che raggiungono comunemente milioni di vertici, poligoni, voxel, particelle, texel, specialmente quando molte di queste cose devono completare molte volte al secondo per fornire feedback interattivo in tempo reale.
Detto questo, non c'è una forte enfasi sulla complessità algoritmica nella discussione in genere tra colleghi, forse perché è in qualche modo data per scontata e piuttosto "rudimentale". In genere, se si sta scrivendo un tracciatore di percorsi, si presume che funzionerà in un tempo logaritmico o superiore e che le strutture di dati come le gerarchie di volumi limitanti siano familiari e relativamente banali da implementare per il lettore. Ho anche avuto un collega esperto che continuava a dire che il multithreading e il SIMD sono più importanti degli algoritmi, e non penso che intendesse ciò, nel senso che ci si potrebbe aspettare di ottenere molto dal parallelizzare una sorta di bolla. Penso che lo abbia detto perché dato per scontato che avremmo applicato algoritmi sensibili,
Spesso in questi giorni l'attenzione si concentra sul prendere molti di questi algoritmi familiari e farli sfruttare meglio le caratteristiche sottostanti dell'hardware come cache della CPU, registri e istruzioni SIMD, GPU e core multipli. Ad esempio, Intel ha escogitato un nuovo modo di prendere il vecchio BVH familiare e di elaborare il concetto di "pacchetti di raggi", fondamentalmente testando più raggi coerenti contemporaneamente con una sorta di attraversamento di alberi ricorsivo (che potrebbe sembrare simile) verrebbe con la sua parte di complessità e spese generali, tranne che è più che compensato dal fatto che quei raggi possono ora essere testati simultaneamente per intersezioni raggio / AABB e raggio / triangolo attraverso istruzioni e registri SIMD).
Una cosa simile con una simile suddivisione catmull-clark, che è roba molto rudimentale nella computer grafica. Ma oggi ciò che è competitivo, caldo e super efficiente sono le implementazioni GPU che si avvicinano alla suddivisione CC usando Gregory Patches, come reso popolare da Charles Loop e successivamente adottato da Pixar. L'implementazione della CPU più semplice è ora piuttosto obsoleta, non necessariamente perché è stata sostituita in termini di complessità algoritmica, ma perché è stata sostituita da qualcosa che gioca bene con la GPU.
E di solito questa è una grande sfida in questi giorni non sta presentando il miglior algoritmo in un modo relativamente indipendente dalle caratteristiche sottostanti dell'hardware. In realtà ho avuto il mio piede nel settore inventando una nuova struttura di accelerazione che ha notevolmente accelerato il rilevamento delle collisioni per l'animazione di personaggi e altri corpi molli negli anni '90 usando un approccio di segmentazione gerarchica rispetto a un indice spaziale, che mi ha procurato molto offerte di lavoro, ma al giorno d'oggi non è più così impressionante da quando l'ho pubblicato molto prima che avessimo cache CPU e core multipli e GPU programmabili e cosa no, e al giorno d'oggi utilizzo un approccio completamente diverso a seguito delle modifiche significative hardware sottostante.