Sarà dipendente dal contesto.
"Risolvere un bug di 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à del tempo. Ad esempio, per ottenere i primi risultati N da un database, basta dirlo. Quando si converte un kludge inefficiente in una chiamata ottimizzata integrata, la spiegazione sembra superflua.
Il motivo per cui considero un algoritmo con tempo di esecuzione quadratica per meritare una revisione del codice (discussione) non è tanto perché è lento (slow è relativo; quadratica è veloce rispetto al esponenziale), ma perché l'intuizione umana (come il tuo i clienti, o colleghi programmatori) sono innatamente a disagio con una funzionalità software che devia troppo dal tempo di esecuzione lineare, a causa del mescolamento delle aspettative dalla vita quotidiana.
Molti reclami dei clienti relativi alle 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 aver installato un aggiornamento, la stessa funzionalità impiega più di 1 minuto.
- Questo è un confronto con una prestazione precedentemente valutata. Il cliente tiene le prestazioni future a un metro assoluto di una scala temporale umana (dai secondi ai minuti).
-
Ho inviato 100 lavori al sistema. Perché impiega 400 volte il tempo di elaborazione, rispetto al tempo necessario per un singolo lavoro?
- Il cliente si aspetta che i tempi di elaborazione siano lineari. Infatti, il cliente non può capire o accettare che esistano attività più lente di quelle lineari.
Per questo motivo, un cliente considererà il bug di esecuzione un errore se entrambi sono veri:
- Più lento di lineare
- Notevole (cioè rientra nell'intervallo di tempo umano (più lungo di secondi o minuti) in base alle dimensioni tipiche dell'attività)
Argomenti legittimi che spiegano che un algoritmo di runtime quadratico non pone problemi (cioè non merita un cambio di codice):
- La dimensione dell'attività generalmente gestita da questa funzione di runtime quadratica è in qualche modo limitata
- Data l'intervallo di dimensioni tipico, il tempo di esecuzione effettivo (assoluto) è ancora abbastanza piccolo da essere eliminato
- Se un utente tenta effettivamente di inviare un'attività sufficientemente ampia da essere visibile, l'utente riceverà un messaggio di avviso relativo al lungo tempo 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.
Un sacco di algoritmi utili per lo sviluppo di applicazioni tipiche sono infatti più lento di quello lineare (per lo più O (N log N), come in l'ordinamento), quindi il software su larga scala sarà infatti cercare di soluzione che, da solo l'ordinamento relativo parte dei dati, o utilizzare tecniche di filtraggio degli istogrammi (statistiche) che raggiungono un effetto simile.
Questo vale per i clienti del software, ma se consideri che gli utenti di una libreria software o di una funzione API siano anche "clienti", la risposta verrebbe comunque applicata.