Do computer scientists and mathematicians research such algorithms just for fun/out of curiosity/so they have an original dissertation topic or are there really some real life situations in which naive algorithms are too slow and we need a more efficient one?
L'efficienza è la chiave non per divertimento o per curiosità ma per essere in grado di risolvere i problemi più velocemente in informatica più spesso rispetto allo sviluppo generale del software.
Anche se è vero che i computer sono abbastanza veloci da fare calcoli di O(n)
come:
List x = [1,2,3,4,5,6]
print [i for i in x]
A volte quando abbiamo algoritmi che hanno complessità come O(n^2)
o anche O(n log(n))
affrontiamo problemi di scalabilità. Quando il set di dati che stiamo eseguendo l'iterazione o esegue qualsiasi computazione in espansione, richiede più tempo per il calcolo. Pertanto, se siamo in grado di trovare algoritmi in grado di ridurre la complessità temporale da dire O(n)
a O(log n)
, siamo in grado di vedere una differenza maggiore su set di dati più grandi.
Vedi questo ad esempio:
Vogliamo provare e ottenere algoritmi il più vicino possibile alle aree verdi.
Una delle ragioni principali per cui la complessità è un argomento importante nell'informatica è a causa delle classi di complessità P
e NP
e il tentativo di provare se P = NP
, che potrebbe non sembrare un grosso problema nel contesto della programmazione; ma diventa un enorme affare con concetti come la crittografia.
Per uno scenario reale, prendiamo il problema dei commessi viaggiatori che è O(2^nn^2)
. Questo problema non è risolvibile in tempo polinomail ( P
) e quindi appartiene alla classe dei problemi di NP
perché non c'è ancora ancora un algoritmo per risolverlo in P
. Tuttavia, se esiste una ricerca e una soluzione per risolverlo in P
, ci sono molte implicazioni che possiamo applicare ad altri algoritmi.
Vale anche la pena dare un'occhiata agli ordinamenti degli algoritmi, ad esempio l'ordinamento delle bolle ha una complessità di O(n^2)
, mentre abbiamo trovato algoritmi migliori per l'ordinamento come Heapsort che ha il caso peggiore O(n log(n))
.