Frakil17 ha scritto:
Mi chiedevo, per curiosità, l'ordinamento a cosa potrebbe servire nella "vita reale"?
Serve.
Ad esempio per decidere qual'è l'ultimo file inserito in una directory, qual'è il client più importante di un'azienda e così via
è fondamentale conoscere e saper implementare questi algoritmi per un programmatore?
A dir la verità no, perchè quasi sempre, per non dire sempre, utilizzerai funzioni di libreria già precostituite, con le quali dirai qualcosa del tipo "ordina questo vettore" e bon
In quali casi, ad esempio?
Implementare effettivamente un algoritmo di ordinamento? Penso difficilmente ti capiterà mai, neppure in decenni di lavoro
Inoltre il Selection/Bubble Sort sono gli algoritmi più semplici e più intuitivi da imparare, ma secondo voi qual'è il più efficiente?
Grazie anticipatamente
Ci sono biblioteche intere di testi sugli algoritmi di ordinamento, e non ne esiste "il migliore".
Ci sono grandi differenze tra le analisi teoriche, quelle pratiche, e quelle di produzione.
Diciamo che dato il problema X in letteratura si consiglia di usare l'algoritmo A, col problema Y l'algoritmo B e così via.
Vuoi un esempio? Supponi di dover ordinare un vettore di due elementi (sì lo so, è piccolo, ma non è degenere).
Qualsiasi algoritmo che ti venga in mente è di gran lunga più inefficiente di un banale "if...then...else..."
Analogamente se devi ordinare quantità di dati maggiori della dimensione della RAM fisica del computer dovrai "arrangiarti" con strategie in cui si lavora a "passi successivi", anche se poco efficienti, al fine di terminare la computazione (classica situazione per database).
Se devi ordinare oggetti "massicci", cioè non banali interi, allora entrano in gioco elementi particolari come gli accessi locali, il pre-caricamento della cache e dei registri della CPU e così via.
Infine potresti addirittura essere interessato ad algoritmi che minimizzino il consumo elettrico del dispositivo, se stai lavorando su un telefono ad esempio.
Potresti essere interessato ad avere un tempo deterministico di elaborazione, cioè di poter pre-calcolare il tempo massimo che impiegherà il tuo algoritmo (quindi niente elaborazioni "alla quicksort") e via
... e via di questo passo, davvero ce ne saranno 1.000 in letteratura, che partono da una trentina di idee diverse, poi man mano evolute e "limate" a seconda dei casi.