Utilità e curiosità algoritmi di ordinamento

di il
9 risposte

Utilità e curiosità algoritmi di ordinamento

Ciao a tutti, sto studiando da un libro scolastico e da internet gli algoritmi di ordinamento che applico su un array monodimensionale per esercitarmi e per comprenderli al meglio.
Fino ad oggi ho imparato il Selection Sort ed il Bubble Sort.
Mi chiedevo, per curiosità, l'ordinamento a cosa potrebbe servire nella "vita reale"? è fondamentale conoscere e saper implementare questi algoritmi per un programmatore? In quali casi, ad esempio?
Inoltre il Selection/Bubble Sort sono gli algoritmi più semplici e più intuitivi da imparare, ma secondo voi qual'è il più efficiente? Ho letto su internet del Merge Sort, ma per le mie conoscenze attuali è davvero dura comprendere il suo codice, ho solo imparato come funziona a livello teorico (personalmente credo che sia il più efficiente), magari andando avanti con gli studi, dato che sono ancora all'inizio, riuscirò a comprenderlo

Grazie anticipatamente

9 Risposte

  • Re: Utilità e curiosità algoritmi di ordinamento

    1) gli algoritmi di ordinamento servono in moltissimi casi ed hanno il compito di semplificare i problemi di ricerca o di ottimizzazione. Se non sai di che si sta parlando, non fa niente. Sappi solo che servono parecchio
    2) ce ne sono tantissimi, ma nella maggior parte dei casi non serve implementarli perche' e' gia' stato fatto la dove servono
    3) quicksort e' ancora piu' efficente, ma se devi ordinare 1.000.000.000 di record (non impossibile) ne esistono altri ancora.

    Giusto come esempio: se devi cercare un valore in un vettore di 1000 elementi, senza ordinamento devi fare mediamente 500 confronti, con ordinamento SOLO 10, cioe': sei 50 volte piu' veloce
  • Re: Utilità e curiosità algoritmi di ordinamento

    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.
  • Re: Utilità e curiosità algoritmi di ordinamento

    Grazie mille per le vostre risposte, davvero complete ed interessanti, che mi hanno tolto qualsiasi dubbio e fatto imparare più di qualcosa!

    Avrei un'altra curiosità, anche se non appartenente agli algoritmi di ordinamento, ma alla programmazione ad oggetti (OOP).
    Quanto essa viene usata nel mondo reale? Un programmatore che lavora, usa più la programmazione imperativa o la OOP?
    Riguardo invece ad un software personale (ad esempio devo creare un programma per me stesso) quale converrebbe usare??
    Inoltre, per me che sono all'inizio e sto imparando da un libro scolastico e approfondendo via internet, quanto sarebbe utile imparare (sia oggi che in futuro) un linguaggio a basso livello come l'Assembly?

    (Avendo fatto domande che vanno fuori tema rispetto al titolo, devo modificarlo?)

    Grazie ancora
  • Re: Utilità e curiosità algoritmi di ordinamento

    1) la programmazione OOP si usa nel 99% dei casi
    2) la programmazione assembler si usa moooolto raramente e per implementare solo piccoli pezzetti di codice che richiedono particolari performance.
  • Re: Utilità e curiosità algoritmi di ordinamento

    Frakil17 ha scritto:


    Avrei un'altra curiosità, anche se non appartenente agli algoritmi di ordinamento, ma alla programmazione ad oggetti (OOP).
    Quanto essa viene usata nel mondo reale? Un programmatore che lavora, usa più la programmazione imperativa o la OOP?
    Dipende.
    Spesso 0% oggetti, o 1% per usare quelli già fatto.
    100% se è costretto dal datore di lavoro
    Riguardo invece ad un software personale (ad esempio devo creare un programma per me stesso) quale converrebbe usare??
    Quello che conoscei meglio
    Inoltre, per me che sono all'inizio e sto imparando da un libro scolastico e approfondendo via internet, quanto sarebbe utile imparare (sia oggi che in futuro) un linguaggio a basso livello come l'Assembly?
    0%
  • Re: Utilità e curiosità algoritmi di ordinamento

    Per evitare che tu ti possa confendere le idee ti rispondo:
    1) Gli algoritmi di ordinamento sono indispensabili, li devi conoscere.
    2) OOP: non ti so rispondere.
    3) Quale linguaggio usare? Dipende dalle specifiche, dalle tue conoscenze e una moltitudine di altri fattori. Non si può dire a priori.
    4) Assembly: dipende da che intendi fare nella vita o comunque dai tuoi interessi. Se vuoi avere una profonda conoscenza dei calcolatori,sviluppare per microcontrollori, studiare i sistemi operativi, scrivere software in C perfettamente ottimizzato (su quasiasi piattaforma, dai simpatici giocattoli della Microchip fino ai monotoni x86, passando per i più stimolanti Alpha, PPC e Mips) ecc, devi necessariamente passare per l'elettronica analogica e digitale, di conseguenza per l'assembly (inizialmente per MCU base a 8 bit con al più 3 dozzine di istruzioni come i PIC 16xxx). Se vuoi fare paginette internet o scrivere gestionali allora puoi dedicati a C#,.NET o quel che si consiglia a chi è interessato solo a queste cose.

    Dire che alcune cose sono inutili così per qualunquismo o perché non si è interessati non mi sembra corretto, soprattutto nei confronti di un ragazzo che chiede informazioni sul da farsi.
  • Re: Utilità e curiosità algoritmi di ordinamento

    loopunrolling ha scritto:


    Dire che alcune cose sono inutili così per qualunquismo o perché non si è interessati non mi sembra corretto, soprattutto nei confronti di un ragazzo che chiede informazioni sul da farsi.
    Alè, ecco il "qualunquismo".

    Se partiamo dal non saper nulla di algoritmi di ordinamento, che rilevanza ha l'assembler in generale?
    Zero.
    Come può averlo pilotare un jet plurimotore per chi non ha neppure la patente.

    Alzi la mano quanti hanno scritto un programma assembly x86 dentro un programma C, e quale, e magari ne posti il sorgente.

    Alzi la mano quanti hanno scritto un ordinatore assembly, e ne posti il sorgente (hic rhodus, hic salta)

    Si tratta di avere l'esperienza, e le capacità, per mettere le "cose" in prospettiva per impiegare la risorsa finita (cioè il tempo) nel modo più produttivo
  • Re: Utilità e curiosità algoritmi di ordinamento

    Whatever.
  • Re: Utilità e curiosità algoritmi di ordinamento

    Grazie a tutti per aver chiarito ancora una volta i miei numerosi e banali dubbi.
    Sono ancora all'inizio del mio apprendimento riguardo l'arte della programmazione, pensate che solo tra qualche giorno dovrò affrontare la OOP, mentre adesso sto studiando la ricorsione e devo fare più di qualche esercizio su di essa. Ma comunque, per curiosità, credo che "programmerò" in Assembly, almeno per capire in minima parte qualche riga quando mi capita di vedere su internet qualche codice sorgente... nulla di più, perchè per me è ancora troppo ma troppo presto per apprendere cose del genere.
Devi accedere o registrarti per scrivere nel forum
9 risposte