All'università, durante i nostri corsi sugli algoritmi, impariamo come calcolare con precisione la complessità di vari semplici algoritmi utilizzati nella pratica, come le tabelle hash o l'ordinamento rapido.
Ma ora in un grande progetto software, quando vogliamo renderlo più veloce, tutto ciò che facciamo è guardare singoli pezzi - alcuni loop annidati lì che possono essere sostituiti da una tabella hash più veloce, una ricerca lenta qui che può essere accelerata da una tecnica più elaborata, ma non calcoliamo mai la complessità di tutta la nostra pipeline.
C'è un modo per farlo? Oppure le persone in pratica si affidano semplicemente "localmente" a un algoritmo veloce, per rendere l'intera applicazione più veloce, anziché considerare globalmente l'applicazione nel suo insieme?
(Perché mi sembra non banale dimostrare che se si accumulano un gran numero di algoritmi che sono noti per essere molto veloci da soli, si finisce anche con un'applicazione veloce nel suo insieme.)
Lo sto chiedendo, perché ho il compito di accelerare un grande progetto scritto da qualcun altro, in cui molti algoritmi interagiscono e lavorano su dati di input, quindi non mi è chiaro come l'impatto di avere un singolo algoritmo più veloce su l'intera applicazione.
n
aumenta.