Sarà dipendente dal contesto.
"Correzione di un bug delle prestazioni di runtime quadratico" è in genere ciò che vedo. Tuttavia, se ciò merita di essere risolto (una modifica del codice) dipende dal contesto.
Tieni presente che i database offrono molti strumenti per migliorare la complessità temporale. Ad esempio, per ottenere i primi N risultati da un database, basta dirlo. Quando si converte kludge inefficiente in chiamata ottimizzata integrata, la spiegazione sembra superflua.
Il motivo per cui considero un algoritmo con runtime quadratico per meritare una revisione del codice (discussione) non è tanto perché è lento (lento è relativo; quadratico è veloce rispetto all'esponenziale), ma perché l'intuizione umana (come i tuoi clienti, o colleghi programmatori) sono a disagio con una funzionalità software che si discosta troppo dal runtime lineare, a causa della mescolanza delle aspettative dalla vita quotidiana.
Molti reclami dei clienti sulle prestazioni del software rientrano in queste due categorie:
L'intero sistema (software e hardware) è stato specificato in base all'utilizzo stimato. La scorsa settimana, tutto funziona bene, una certa funzionalità ha richiesto meno di 5 secondi. Questa settimana, dopo l'installazione di un aggiornamento, la stessa funzionalità richiede più di 1 minuto.
- Questo è un confronto con una performance precedentemente comparata. Il cliente mantiene le prestazioni future ad un metro assoluto di una scala temporale umana (da secondi a minuti).
Ho inviato 100 lavori al sistema. Perché l'elaborazione richiede 400 volte il tempo, rispetto al tempo impiegato per un singolo lavoro?
- Il cliente si aspetta che i tempi di elaborazione siano lineari. In effetti, il cliente non può capire o accettare l'esistenza di attività più lente di quelle lineari.
Per questo motivo, un cliente considererà il tempo di esecuzione un bug se entrambi sono veri:
- Più lento di lineare
- Notevole (ovvero rientra nell'intervallo di tempo umano (più lungo di secondi o minuti) date le dimensioni tipiche dell'attività)
Argomenti legittimi che spiegano che un algoritmo di runtime quadratico non pone problemi (ovvero non merita una modifica del codice):
- La dimensione dell'attività generalmente gestita da questa funzione di runtime quadratica è in qualche modo limitata
- Dato l'intervallo di dimensioni tipico, il tempo di esecuzione (assoluto) effettivo è ancora abbastanza piccolo da essere ignorato
- Se un utente tenta effettivamente di inviare un'attività sufficientemente grande da essere evidente, l'utente riceverà un messaggio di avviso sul lungo periodo di esecuzione
- Gli utenti del sistema sono tutti esperti, quindi sanno cosa stanno facendo. Ad esempio, gli utenti di un'API dovrebbero aver letto la stampa fine sulla documentazione dell'API.
Molti algoritmi utili per lo sviluppo di applicazioni tipiche sono in effetti più lenti rispetto a quelli lineari (principalmente O (N log N), come nell'ordinamento), pertanto i software su larga scala cercheranno effettivamente di risolvere il problema, ordinando solo la parte pertinente del dati o utilizzare tecniche di filtro dell'istogramma (statistico) che ottengono un effetto simile.
Questo vale per i clienti di software, ma se si considera che anche gli utenti di una libreria di software o di una funzione API sono "clienti", la risposta sarebbe comunque valida.